我想匹配一个包含“subscribe”并且没有“did not”或“unsub。*”的字符串。
例如,
“请订阅我”将匹配
但“我没有订阅此电子邮件”或“请取消订阅我”将无法匹配。
我拥有的是
".*subscribe(?!.*did\\s+not)(?!.*unsub.*)"
显然不起作用。
所以,我想要的表达式是(A和!B和!C)
任何帮助都将不胜感激。
谢谢,
埃里克
答案 0 :(得分:1)
你的前瞻应该是正则表达式的开头:
re.match(r"(?!.*did\s+not)(?!.*unsub).*subscribe", text)
答案 1 :(得分:0)
的正则表达式:强> 的
^(?!.*unsub)(?!.*did not).*subscribe
的的Python:强> 的
re.match(r"^(?!.*unsub)(?!.*did not).*subscribe", str)
答案 2 :(得分:0)
你可以用积极和消极的前瞻来做到这一点,但更好的方法是为搜索词设置一个正则表达式,为停用词设置另一个正则表达式。
if re.search(r"\bsubscribe", text) and not re.search(r"did\s+not|\bunsub", text):
unsubscribe(sender)
如果您需要在特定位置包含/排除文本,则只需使用前瞻。
另请注意,\b
(字边界)将保留“订阅”以匹配“取消订阅”字样内容。