「not」のすべての出現を検索したいのですが、「not good」または「not bad」という用語は含まれていません。
たとえば、「not not good, not bad, not mine」は、最初と最後の「not」に一致します。
Pythonでreパッケージを使用してそれを達成するにはどうすればよいですか?
否定先読みアサーションを使用します。
\bnot\b(?!\s+(?:good|bad))
これは、とが文字列の直後にnot
ある場合を除いて、に一致します。またはではなくという単語に確実に一致するように、単語境界を追加しました。good
bad
not
\b
not
not
nothing
knot
\b
単語境界です。前の文字が単語文字で、後の文字がそうでないこと、およびその逆であることを確認します。単語の文字は、通常、英語のアルファベット (az、AZ)、数字 (0-9)、およびアンダースコア(_) ですが、正規表現のフレーバーによってはさらに多くの文字が含まれる場合があります。
(?!pattern)
pattern
ゼロ幅の負の先読みの構文です。現在のポイントから、入力文字列で指定された先読みが見つからないことを確認します。
\s
空白文字を示します (スペース (ASCII 32)、改行\n
、タブ\t
など - 詳細についてはドキュメントを確認してください)。勝手に合わせたくない場合は、 (スペース)に置き換え\s
てください。
+
inは、前のトークンの\s+
1 つ以上のインスタンスに一致します。この場合は、空白文字です。
(?:pattern)
非キャプチャ グループです。good
とをキャプチャする必要がないbad
ので、パフォーマンスのために指定します。