2

繰り返しグループを 1 行でキャプチャできるようにしたい。以下に示すように、私は自分の仕事をしました。

(((?:\s*^>\s*[0-9]+\s*,\s*[0-9]+\s*,\s*[a-zA-Z]+\s*(,\s*[a-zA-Z]+\s*)*;$\s*)|(?:\s*^>\s*[0-9]+\s*,\s*[0-9]+\s*,\s*[a-zA-Z]+\s*,\s*[0-9]+\s*(,\s*[\-]?[0-9]+\s*)*;$\s*))+)

正規表現の視覚化

Debuggex でライブ編集

それはキャプチャ> 9, 2, door, open;し、> 3, 3, door,1, 1;個別に罰金を科します。でも、私も撮りたい> 9, 2, door, close; > 1, 9, door, close; > 3, 3, door, 1, 1;。最後に + 量指定子を使用して括弧を使用してグループを囲みましたが、繰り返しパターンを正しくキャプチャしません。どこが間違っていたのか教えていただけますか?

編集済み

次のように、正規表現をやや短くしました。

(((\s*>\s*\d+\s*,\s*\d+\s*,\s*\w+\s*(,\s*\w+\s*)*;\s*)|(\s*>\s*\d+\s*,\s*\d+\s*,\s*\w+\s*,\s*\d+\s*(,\s*[\-]?\d+\s*)*;\s*))+)

正規表現の視覚化

4

2 に答える 2

2

書くつもりなら

> 9, 2, door, close; > 1, 9, door, close; > 3, 3, door, 1, 1;

を 1 行で削除して正規表現を修正する必要があり、これが一致するように完全に^削除する必要があります。$

(((?:\s*>\s*[0-9]+\s*,\s*[0-9]+\s*,\s*[a-zA-Z]+\s*(,\s*[a-zA-Z]+\s*)*;\s*)|(?:\s*>\s*[0-9]+\s*,\s*[0-9]+\s*,\s*[a-zA-Z]+\s*,\s*[0-9]+\s*(,\s*[\-]?[0-9]+\s*)*;\s*))+)

あなたが意味する場合

> 9, 2, door, close;
> 1, 9, door, close;
> 3, 3, door, 1, 1;

すべてが別の行にあるため、複数行の (/mまたは(?m)) 修飾子を追加して正規表現を修正する必要があるため、これは一致します

(?m)(((?:\s*^>\s*[0-9]+\s*,\s*[0-9]+\s*,\s*[a-zA-Z]+\s*(,\s*[a-zA-Z]+\s*)*;$\s*)|(?:\s*^>\s*[0-9]+\s*,\s*[0-9]+\s*,\s*[a-zA-Z]+\s*,\s*[0-9]+\s*(,\s*[\-]?[0-9]+\s*)*;$\s*))+)

これで問題が解決することを願っています

于 2013-08-07T03:41:33.633 に答える
0

申し訳ありませんが、あなたの正規表現は長すぎて読むことができません...スマートで小さな正規表現を作成する代わりに、必要に応じて、フォーマットごとに異なる正規表現を作成し、それらすべてを括弧で囲み、間にパイプを入れます。例えば、 ((\d+)|([a-zA-Z]+))+

編集:あなたはそれをしているようです。簡単にするために、再起動して、最初にすべてを個別に記述します。または、フォーマットの詳細を教えていただければ、私たちがそれを作成することができます :3

于 2013-08-07T02:44:39.940 に答える