私はしばらくの間これをしてきましたが、うまくいかないようです。ここに私がやろうとしていることがあります。 3つの単語word1、word2、word3が与えられたら、それらの順にそれらにマッチする正規表現を作成したいと思いますが、それらの間に一連の潜在的な単語があります(改行を除く)。例えばRegEx - 単語のセットを一致させる
、私が持っていた場合には、以下:
word1 = what
word2 = the
word3 = hell
は、私はシングルマッチで、次の文字列にマッチしたい:私は次の操作を行うことができると思った
"what the hell"
"what in the hell"
"what the effing hell"
"what in the 9 doors of hell"
(可能
regex = "\bword1(\b\w+\b){0,5}word2(\b\w+\b){0,5}word3\b"
アラート、いいえ、それは機能しません。単語間のmからnまでの単語の距離を指定する方法があることが重要です(mは常に< nです)。 (Rubyで)私にとって
これは今のところ最もエレガントで、広告されたとおりに動作しますが、サブマッチがあります。あなたは私に言います、それについて気にしますか?私は、文字列全体が先頭の単語1、末尾の単語2、途中の単語3(「中間のどこか」は単語の距離の問題です)と一致していることが最も大事です。 –
これは、パターンにアンカーを追加するのと同じくらい簡単です。改訂されました! –
サブマッチは気にしないでください。あなたは常に一致する文字列全体を得ることができます。以下で述べるpythonでは、matchobj.group(0)でこれを行います。 サブグループに全く反対の場合は、すべての括弧を(\ s + \ w +)から(?:\ s + \ w +)に切り替えて、サブグループを取得しないようにしてください。 – Clint