我想找到所有出现的“not”,但不包括“not good”或“not bad”这两个词。
比如“not not good,not bad,不是我的”会匹配第一个和最后一个“not”。
我如何使用 python 中的 re 包实现它?
最佳答案
使用否定的先行断言:
\bnot\b(?!\s+(?:good|bad))
这将匹配 not
,除非 good
和 bad
紧跟在字符串中的 not
之后.我添加了单词边界 \b
以确保我们匹配单词 not
,而不是 nothing
中的 not
或结
。
\b
是字边界。它检查前面的字符是单词字符而后面的字符不是,反之亦然。单词字符通常是英文字母(a-z、A-Z)、数字 (0-9)、和下划线 (_),但根据正则表达式的风格,可以有更多字符。
(?!pattern)
是零宽度负先行的语法 - 它将检查从当前点开始,它找不到前面指定的 pattern
输入字符串。
\s
表示空白字符(空格 (ASCII 32)、换行 \n
、制表符 \t
等 - 检查文档以获取更多信息)。如果不想这么随意匹配,把\s
换成(空格)即可。
\s+
中的+
匹配前面标记的一个或多个实例,在这种情况下,它是空白字符。
(?:pattern)
是非捕获组。不需要捕获 good
和 bad
,所以为了性能我指定了。
关于Python 正则表达式 : how to excluding superstrings?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14064465/