我想找到“不”的所有外观,但不包括“不好”或“不坏”的术语。
例如,“not not not good, not bad, not mine”将匹配第一个和最后一个“not”。
如何使用 python 中的 re 包实现这一点?
使用否定的前瞻断言:
\bnot\b(?!\s+(?:good|bad))
这将匹配not
,除了字符串中good
和bad
紧随其后的情况。not
我添加了单词边界\b
以确保我们匹配单词not
,而不是not
在nothing
or中knot
。
\b
是单词边界。它检查前面的字符是单词字符,后面的字符不是,反之亦然。单词字符通常是英文字母 (az, AZ)、数字 (0-9)和下划线(_),但根据正则表达式的风格,可能会更多。
(?!pattern)
是零宽度负前瞻的语法 - 它将检查从当前点开始,它无法pattern
在输入字符串中找到指定的提前。
\s
表示空白字符(空格 (ASCII 32)、新行\n
、制表符\t
等 - 查看文档以获取更多信息)。如果不想这么随意匹配,直接换成(空格)就好\s
了。
+
in匹配前面标记的\s+
一个或多个实例,在这种情况下,它是空白字符。
(?:pattern)
是非捕获组。不需要捕获good
and bad
,因此我指定 so 是为了提高性能。