を繰り返している場合、一致を避けるために否定先読み私はどのように私は次のことを達成することができますを把握しようとしている:Pythonの正規表現 - ワードは
マッチ文字列全体それは言葉"hello"
と単語が含まれている場合"supernova"
両方ともではなく、が文字列で繰り返されています。例えば
:
"hello i am a supernova hello bye" NOT MATCH
"hello i am a test bye" NOT MATCH
"hello i am a supernova supernova bye" NOT MATCH
"hello i am a supernova" MATCH --> result: "hello i am a supernova"
これを解決するために、私は私が当初検討したものから開始しました:私は繰り返し同じ単語を持っている場合、一致しません。私が理解していることは、一つの方法は否定的な先読みを使用することですが、実際には何かを理解することはできません。
誰かが私にヒントをお願いできますか?
おかげ
UPDATE [SOLVED]私は問題を解決していると私は、文字列全体を一致させることができ、完全な正規表現を書くsucceded
場合と、少なくとも二つの異なる単語がある場合にのみ
\A(?!.*\b(hello|supernova)\s.*\b\1\b).*\Z
最初の部分を繰り返さないゼロな長否定先読み(文字列ではありませんかどうかを確認です(.... \ B?!):続くすべて.*
は、単語境界、followeb (hello|supernova)
hello OR超新星、次に\s
空白、それに続く.*
、それに続く\b
単語境界、\1
括弧間に含まれるものである「グループ1」に取り込まれるもの(hello OR supernova)の前に(...)、その後に\b
の単語境界が続きます。
これらのものがすべて存在しない場合は、\Z
の前に文字列全体を.*
と一致させることができます。 \A
と\Z
は文字列の先頭と末尾です。
文字列内の位置は、先読みの実行中は変更されません。
string.count()
を使用して
私はPythonの文字列のドキュメントを見、より明確にあなたがこれまでに試したものを表示するようにあなたの質問を編集することをお勧めしたいです。 2番目の段落に少し触れましたが、これまでに試したことは不明です(少なくとも私にとって)。 –