Python正则表达式:如何排除超级字符串?

8

我想找到所有出现的“not”,但不包括“not good”或“not bad”这些词。

例如,“not not good, not bad, not mine”将匹配第一个和最后一个“not”。

如何使用Python中的re包来实现?

1个回答

8

使用负向先行断言:

\bnot\b(?!\s+(?:good|bad))

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

1
谢谢,但您能解释一下每个符号的含义吗? - CuriousMind
@CodeNoob:已编辑。我假设你至少了解基本符号。 - nhahtdh
非常棒,非常感谢。 - CuriousMind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接