Python正则表达式:如何排除超弦?

Ven*_*tta 7 python regex

我想找到所有"不"的外观,但不包括"不好"或"不坏"的术语.

例如,"不是不好,不坏,不是我的"将匹配第一个和最后一个"不".

如何在python中使用re包来实现呢?

nha*_*tdh 8

使用负前瞻断言:

\bnot\b(?!\s+(?:good|bad))
Run Code Online (Sandbox Code Playgroud)

这将匹配not,除了字符串中的goodbad之后的情况not.我添加了单词边界\b以确保我们匹配单词not,而不是notin nothingknot.


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

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

\s表示空白字符(空格(ASCII 32),新行\n,制表符\t等 - 请查看文档以获取更多信息).如果你不想这么随意匹配,只需\s (space).

The +\s+匹配前面的令牌的一个或多个实例,在这种情况下,它是空白字符.

(?:pattern)是非捕获组.有没有需要捕捉goodbad,所以我对性能指定如此.