Regex 与订单号匹配的正则表达式,例如DE+;10个数字或在+;10个数字

Regex 与订单号匹配的正则表达式,例如DE+;10个数字或在+;10个数字,regex,numbers,chars,Regex,Numbers,Chars,我实际上是在尝试匹配字符串中的一些订单号 字符串可能如下所示: SDSFwsfcwqrewrPL0000018604ergerzergdsfa 或 我需要匹配“PL0000018604”或“AT0000018604” 事实上,我用的是类似的东西,它很有效: .?(AT[0-9]{10})|(BE[0-9]{10})|(FR[0-9]{10})|(IT[0-9]{10}) 但是我们得到的顺序前缀越多,表达式就越长。 它总是2个大写字符后跟10个数字,我想指定不同的大写字符 有更短的版本吗 感谢

我实际上是在尝试匹配字符串中的一些订单号

字符串可能如下所示:

SDSFwsfcwqrewrPL0000018604ergerzergdsfa

我需要匹配“PL0000018604”或“AT0000018604”

事实上,我用的是类似的东西,它很有效:

.?(AT[0-9]{10})|(BE[0-9]{10})|(FR[0-9]{10})|(IT[0-9]{10})
但是我们得到的顺序前缀越多,表达式就越长。 它总是2个大写字符后跟10个数字,我想指定不同的大写字符

有更短的版本吗


感谢您的帮助:)

如果前缀必须是特定的,那么没有什么方法可以缩短模式。不过,您可以收集表达式前面的所有前缀,因此只需使用一次数字部分

例如:

(AT|BE|FR|IT)[0-9]{10}
根据您如何调用它,如果您需要将整个表达式作为一个组捕获(而不是简单地匹配,这是问题所涉及的),您可以在整个表达式周围添加括号。这不会更改匹配的内容,但会更改使用表达式的任何函数返回的内容

((AT|BE|FR|IT)[0-9]{10})
当然,如果您只想将数字部分作为一个单独的组捕获,可以添加更多的括号

((AT|BE|FR|IT)([0-9]{10}))

/[A-Z]{2}\d{10}/
或者
/[A-Z]{2}\d{10,n}/
其中n是序列中我已经使用过的最多的数字,但是没有特定的字符,因此匹配可以是任何两个上面的字符,后跟10个数字。无论如何谢谢:)谢谢,我已经试过了,比赛将是“PL”或“AT”@DeeKaay:我不明白你的评论。如果要匹配PL,请将其添加到列表中
(在| PL |…)
您的表达式将不匹配“AT000001864”,它将只匹配“@DeeKaay:否,它将匹配在,后跟10位数字。该模式表示“匹配AT、BE、FR或IT中的一个,后跟0-9范围内的整整10个字符”,因为如果在.net framework中使用匹配组1,则该模式将仅匹配AT。如果使用整个匹配,则它位于索引0处
((AT|BE|FR|IT)([0-9]{10}))