2017-01-18 11 views
1

私はカンマとオプションのスペースで区切られた非常に長いリストの数字にマッチする正規表現を書こうとしています。 1つの整数に一致することはできません。数字のリストは、どちらの側にもテキストで囲まれた長さが約7000バイトです。正規表現の数字のリストと一致させる

12345 => don't match 
12345,23456,34567,45678 => match 
12345, 23456, 34567, 45678 => match 

私の現在の正規表現、(?<!\.)(([0-9]+,)+[0-9]+)(?!\.)は、スタックオーバーフローが発生します。私がこれまで試してみました、いくつかは以下のとおりです。

([0-9,]+) => doesn't match with optional spaces 
((\d+,[ ]?)+\d+) => worse than the original 
[ ]([0-9, ]+)[ ] => can't be certain the numbers will be bounded by spaces 

私は、元は約3000の段階で、各正規表現は、かかるステップ数をテストするためにhttps://regex101.com/を使用しています。

例(省略さ)文字列:

Processing 145363,145386,145395,145422,145463,145486 from batch 59 

任意の助けをいただければ幸いです。

答えて

2

どの程度

(?:\d+,\s*)+\d+ 

内訳:

 
(?:   # begin group 
    \d+  # digits 
    ,\s*  # ",", optional whitespace 
)+   # end group, repeat 
\d+   # digits (last item in the list) 

\sが最も顕著なの改行(\n)、スペースとタブ以外の空白文字が含まれていること。 \sの代わりに[ \t]を使用して、入力が必要な場合に誤検出を防止します。

あなたがこの正規表現を使用することができます
2

^\d+(?:[ \t]*,[ \t]*\d+)+$ 

RegEx Demo

  • \d+マッチ1桁以上、必要に応じてスペース/タブに囲まれたカンマで区切られた次の番号の
  • (?:...)+マッチ1以上を。
+1

400K!おめでとう。 – fedorqui

+1

おかげさまで@fedorquiがあなたのためにありがとうございました*タイムリーな*希望 – anubhava

1
(\d+,\s*)+\d+ 

\d+,\s*スペース/ NOSPACE続くコンマですべての数字と一致します。しかし、上記のグループのように "、"を持たない最後の番号を探す必要があります。最後の数字は\d+です。

関連する問題