正则表达式匹配订单号,例如 DE + 10 号或 AT +10 号

Regex matching order numbers e.g DE + 10 numbers or AT +10 numbers

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

字符串可能如下所示:

SDSFwsfcwqrewrPL0000018604ergerzergdsfa

FwsfcwqrewrAT0000018604ergerzergdsfaD

我需要匹配 "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}))