正则表达式RE:所有但不是这种模式

时间:2016-04-19 10:39:03

标签: python regex

快速提问... 我需要一个匹配代码中特定字母的正则表达式,除非它包含在某种模式中。

我希望匹配N的东西跟随或前面有任何东西,只要它不在C(= O)之前立即。

示例:

C(=O)N

不匹配

C(=O)CN

应匹配

但它不需要锚点,因为:

C(=O)NCCCN

应该因为最后的N而匹配

到目前为止我有这个:

(?!C\(=O\)N$)[N]

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

你可以使用负面的后视:

(?<!C\(=O\))N

请参阅regex demo

N只有在没有紧接着文字C(=O)序列的情况下才会匹配。

(?<!...)被称为否定前瞻。它不消耗字符(不移动正则表达式索引),而只是检查当前位置之前字符串中是否缺少某些内容。如果文本匹配,则匹配失败(没有匹配)。有关详细信息,请参阅Lookarounds

In Pythonr'(?<!C\(=O\))N'

import re
p = re.compile(r'(?<!C\(=O\))N')
strs = ["C(=O)N", "C(=O)CN", "C(=O)NCCCN"]
print([x for x in strs if p.search(x)])

答案 1 :(得分:2)

使用否定的后视:

(?<!C\(=O\))N

See this regex101 example

问候。