Python 如果前面没有否定词,则Regex包含单词
我想抓住那些说“好”或“好”的短语,但不要被前面的“不”或“不是”否定Python 如果前面没有否定词,则Regex包含单词,python,regex,Python,Regex,我想抓住那些说“好”或“好”的短语,但不要被前面的“不”或“不是”否定 sents= ["good words", # Words after phrase "not good words", "isn't good words", "great words", "not great words"
sents= ["good words", # Words after phrase
"not good words",
"isn't good words",
"great words",
"not great words",
"isn't great words",
"words good", # Words before phrase
"words not good",
"words isn't good"
"words great",
"words not great",
"words isn't great"
"words good words", # Words before and after phrase
"words not good words",
"words isn't good words",
"words great words",
"words not great words",
"words isn't great words",
]
我想回去
good words
words good
words good words
great words
words great
words great words
什么是正则表达式可以让我这样做?从理论上讲,我希望能够有一个单词列表,只有当字符串前面不包含否定词列表中的任何单词时,才能找到该列表。您需要使用向后看,在这种情况下,否定词,因为肯定词也有一个版本。您可以简单地使用它:
(?<!not\s)great
在python中,您可以将此正则表达式与两个负查找断言一起使用:
(?<!isn't )(?<!not )\b(?:good|great)\b
(?<!isn't )(?<!not )\b(?:good|great)\b
>>> sents= ["good words", # Words after phrase
... "not good words",
... "isn't good words",
... "great words",
... "not great words",
... "isn't great words",
... "words good", # Words before phrase
... "words not good",
... "words isn't good",
... "words great",
... "words not great",
... "words isn't great",
... "words good words", # Words before and after phrase
... "words not good words",
... "words isn't good words",
... "words great words",
... "words not great words",
... "words isn't great words",
... ]
>>> reg = re.compile(r"(?<!isn't )(?<!not )\b(?:good|great)\b")
>>> for s in sents:
... if reg.search(s):
... print(s)
...
good words
great words
words good
words great
words good words
words great words