我想过滤掉包含例如日志文件的邮件。句子This is message 12345. Ignore.
如果我使用grep,我可以简单地传递句子并使用-v
开关,例如:
grep -v "This is message 12345\. Ignore\." data.log
问题是,我必须在Python中执行此操作。类似的东西:
import re
with open("data.log") as f:
data = f.read()
# This will select all lines that match the given sentence
re.findall(".*This is message 12345\. Ignore\..*$", data)
# HERE --> I would like to select lines that DO NOT match that sentence
# ???
我尝试使用(?...)
和[^...]
语法(请参阅here),但我无法正确使用。
有什么想法吗?
答案 0 :(得分:4)
像这样使用negative lookahead assertion:
re.findall("(?!^.*This is message 12345\. Ignore\..*$).*", data)
并启用m
修饰符,以便^
和$
匹配行的开头和结尾。
答案 1 :(得分:4)
一个更简单的方法是将其转换为正匹配问题:
通常,与正则表达式的否定匹配变得相当复杂。使用正匹配找到你不想要的东西通常更简单,更有效,然后用编程逻辑排除那些东西。