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 で見つけた 1 つのことは、(...). さらに、\s{0,19}orを使用\s{0,5}すると、単に次のように記述できます\s*0-19回または回の使用に制限されていない場合にのみ、最後の方が優れています0-5

于 2013-08-05T12:56:28.873 に答える