我想找到所有出现的“not”,但不包括“not good”或“not bad”这些词。
例如,“not not good, not bad, not mine”将匹配第一个和最后一个“not”。
如何使用Python中的re包来实现?
使用负向先行断言:
\bnot\b(?!\s+(?:good|bad))
not
,除非good
和bad
紧跟在字符串中的not
后面。我添加了单词边界\b
以确保我们匹配单词not
,而不是nothing
或knot
中的not
。
\b
是单词边界。它检查前面的字符是单词字符,并且后面的字符不是,反之亦然。单词字符通常是英文字母(a-z,A-Z),数字(0-9),和下划线(_),但根据正则表达式规则可能会有更多。
(?!pattern)
是零宽度负向预查的语法 - 它将检查从当前点开始,输入字符串中不能找到指定的pattern
。
\s
表示空白字符(空格(ASCII 32),换行\n
,制表符\t
等 - 请查阅文档以获取更多信息)。如果你不想那么任意地匹配,请用
(空格)替换\s
。
+
在\s+
中匹配先前标记的一次或多次出现,此处为空白字符。
(?:pattern)
是非捕获组。没有必要捕获good
和bad
,所以我为了提高性能而指定了这个。