7

我想找到“不”的所有外观,但不包括“不好”或“不坏”的术语。

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

如何使用 python 中的 re 包实现这一点?

4

1 回答 1

8

使用否定的前瞻断言:

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

这将匹配not,除了字符串中goodbad紧随其后的情况。not我添加了单词边界\b以确保我们匹配单词not,而不是notnothingor中knot


\b是单词边界。它检查前面的字符是单词字符,后面的字符不是,反之亦然。单词字符通常是英文字母 (az, AZ)、数字 (0-9)和下划线(_),但根据正则表达式的风格,可能会更多。

(?!pattern)是零宽度负前瞻的语法 - 它将检查从当前点开始,它无法pattern在输入字符串中找到指定的提前。

\s表示空白字符(空格 (ASCII 32)、新行\n、制表符\t等 - 查看文档以获取更多信息)。如果不想这么随意匹配,直接换成(空格)就好\s了。

+in匹配前面标记的\s+一个或多个实例,在这种情况下,它是空白字符。

(?:pattern)是非捕获组。不需要捕获goodand bad,因此我指定 so 是为了提高性能。

于 2012-12-28T04:16:02.757 回答