2

大家好,我是正则表达式的新手,我已经编写了正则表达式,但它是非常冗长的正则表达式,所以我希望任何人都可以帮助我优化它?

我的正则表达式-->

(T)(\d{9})(T)(\s{0,19}\d{0,19}\s{0,19}[0-9DO ]\d{0,19}\s{0,19}[OD0-9 ]\s{0,19}\d{0,19}\s{0,19}\d{0,19}[0-9D ]\d{0,19})(O)(\s{0,5}\d{0,19})\b

我要匹配的模式 -->

T062102098T0741 0361212401O
T011900571T 000007250107O1274
T065000090T203 93 5797 9O 4037  
T325170628T0108626004D18O01054
T071108452T    42D896D5O 3587 
T041211609T 01D1270DD4O 2721
T021407912TO9196D00580D6O 7106
T081219108T O45D936D4O 3155
T074909988T O022D853 6O 1340

我正在避免的模式->

T071904779T154505122619 2051
T065000090T000 32 493O9O 11007

所以任何帮助都会很棒。在此先感谢。

4

1 回答 1

0

您的正则表达式很好,而是可以简化(也许优化)如下:

(?x)
   (
      (?:T\d{9})
      (?:T\s*\d{0,19}\s*[0-9DO ]\d{0,19}\s*[OD0-9 ]\s*\d{0,19}\s*\d{0,19}[0-9D ]\d{0,19})
      (?:O\s*\d{0,19})
      \b
   )

我在您的 RegEx 中发现的一件事是不必要地使用(...). 此外,使用\s{0,19}or\s{0,5}可以简单地写为\s*. 最后一个更好,前提是您不限于使用0-19次数或0-5次数。

于 2013-08-05T12:56:28.873 回答