import re
txt = 'harry potter is awsome so is harry james potter'
pat = '\W+(?!potter)'
re.findall(pat,txt)
据我所知,所出的,应当是波特所没有跟从的一切话
[波特','是','恶','所以','是','哈利','詹姆斯','波特']
但实际产出是
“,”哈利“,”波特“,”is“,”awsome“,”so“,”is“,”哈利“,”詹姆斯“,”波特“]
为什么模式也符合哈利波特所遵循的?
最佳答案
我得到这个结果:
[' ', ' ', ' ', ' ', ' ', ' ']
……这正是我所期望的
\W+
(注意大写字母W
)匹配一个或多个非单词字符,因此\W+(?!potter)
匹配输入中单词之间的空白,除非即将出现的单词以“potter”开头如果我想匹配每个不跟“potter”一词的单词,我会使用这个regex:pat = r'\b\w+\b(?!\W+potter\b)'
\b
匹配aword boundary;前两个确保我匹配的是整个单词,最后一个确保即将出现的单词是“potter”,而不是以“potter”开头的较长单词。注意我如何使用原始字符串(
r'...'
)。您应该养成在Python中对所有regex使用它们的习惯在这种情况下,如果我使用了普通字符串,\b
将被解释为退格字符。关于python - 为什么以下否定前瞻不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7543541/