1

私はこの正規表現を持っています:

\ba\.?b\.?c\.?\b( something)?

一致する

  • abc
  • abc
  • abc何か
  • ...

重要度の高い順に 2 回使用します。まず、上記のケースとまったく同じ文字列を見つけたいので、行の最初と最後に^追加しようとします。$何も見つからない場合、制約は削除され、次のような文字列を受け入れました

  • フー abc フー
  • 何とかabc何とか何とか

問題は、最初のケースでa.b.c.あり\b$. だから私が使用する場合

^\ba\.?b\.?c\.?\b( something)?$

a.b.c.丸括弧内の部分が「無視」され\bており、に近い部分に$は理解できない動作があるため、単純なものは一致しません。一方a.b.c(最後のドットなし)は一致します

秒を変更する\b\Wすべてが機能しますが、他の不要な文字列と一致するかどうかはわかりません。正規表現を 1 つだけ使用してこれを解決する方法についてのアイデアはありますか?

これが関連する可能性がある場合、私はPythonを使用しています

4

1 に答える 1

0

\b問題は単純に(ソースを参照)の意味から来ています。一致する単語境界位置がないため、この部分\.\b$は何にも一致しません (ドットと文字列の終わりの間の位置は単語境界位置ではありません)。
試してみてください:

^\ba\.?b\.?c\.?(?:\b|$)

代わりは。

「何か」の部分を使用すると、次のようになります。

^\ba\.?b\.?c\.?(?:\b|$)( something)?$

(ここで改善する必要があるかもしれませんが、うまくいくはずです)

于 2013-04-16T14:40:10.433 に答える