0

「subscribe」を含み、「did not」または「unsub.*」を含まない文字列に一致させたいと考えています。

例えば、

「私を購読してください」が一致します

しかし、「このメールを購読しませんでした」または「購読を解除してください」は一致しません。

私が持っているのは

".*subscribe(?!.*did\\s+not)(?!.*unsub.*)"

どうやらうまくいきません。

繰り返しますが、必要な式は (A and !B and !C) です

どんな助けでも大歓迎です。

ありがとうございました、

エリック

4

3 に答える 3

1

先読みは正規表現の先頭にある必要があります。

re.match(r"(?!.*did\s+not)(?!.*unsub).*subscribe", text)
于 2012-06-27T20:07:03.670 に答える
0

肯定的および否定的な先読みでこれを行うことができますが、はるかに優れたアプローチは、検索語用に 1 つの正規表現を使用し、ストップワード用に別の正規表現を使用することです。

if re.search(r"\bsubscribe", text) and not re.search(r"did\s+not|\bunsub", text):
    unsubscribe(sender)

先読みは、特定の位置にテキストを含める/除外する必要がある場合にのみ使用する価値があります。

\bまた、 (単語境界) は、「subscribe」が「unsubscribe」という単語内で一致しないようにすることにも注意してください。

于 2012-06-27T23:18:20.673 に答える
0

正規表現:

^(?!.*unsub)(?!.*did not).*subscribe

パイソン:

re.match(r"^(?!.*unsub)(?!.*did not).*subscribe", str)
于 2012-06-27T20:08:50.877 に答える