快速提问... 我需要一个匹配代码中特定字母的正则表达式,除非它包含在某种模式中。
我希望匹配N的东西跟随或前面有任何东西,只要它不在C(= O)之前立即。
示例:
C(=O)N
不匹配
C(=O)CN
应匹配
但它不需要锚点,因为:
C(=O)NCCCN
应该因为最后的N而匹配
到目前为止我有这个:
(?!C\(=O\)N$)[N]
任何帮助都将不胜感激。
答案 0 :(得分:2)
你可以使用负面的后视:
(?<!C\(=O\))N
请参阅regex demo
N
只有在没有紧接着文字C(=O)
序列的情况下才会匹配。
(?<!...)
被称为否定前瞻。它不消耗字符(不移动正则表达式索引),而只是检查当前位置之前字符串中是否缺少某些内容。如果文本匹配,则匹配失败(没有匹配)。有关详细信息,请参阅Lookarounds。
In Python:r'(?<!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)