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

时间:2015-09-28 13:26:37

标签: regex numbers chars

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

字符串可能如下所示:

SDSFwsfcwqrewrPL0000018604ergerzergdsfa

FwsfcwqrewrAT0000018604ergerzergdsfaD

我需要匹配" PL0000018604"或" AT0000018604"。

实际上,我正在使用类似的东西并且它有效:

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

但是我们得到的订单前缀越多,表达式就越长。 它总是2个大写字母后跟10个数字,我想指定不同的大写字符。

有没有更短的版本?

感谢您的帮助:)

1 个答案:

答案 0 :(得分:2)

如果前缀必须是特定的,那么缩短模式的方法并不多。但是,您可以收集表达式前面的所有前缀,这样您只需要拥有一次数字部分。

例如:

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

根据您的调用方式,如果您需要将整个表达式作为一个组进行捕获(而不是简单的匹配,这就是问题所针对的问题),您可以在整体上添加括号表达。这不会改变匹配的内容,但它会改变使用表达式的任何函数返回的内容。

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

当然,如果你只想将数字部分也作为一个单独的组捕获,你可以添加更多的括号

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