Regex-RE:所有但不是这个模式

2024-06-16 09:53:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想要一个匹配N的东西,后面跟或前面跟任何东西,只要它前面不是直接跟C(=O)

示例:

C(=O)N

不应匹配

C(=O)CN

应该匹配

但它不需要锚,因为:

C(=O)NCCCN

因为结尾的N应该匹配

到目前为止,我有:

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

任何帮助都将不胜感激


Tags: 代码示例结尾字母模式cnncccn
2条回答

相反,要用消极的眼光看后面:

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

See this regex101 example

敬礼

您可以使用“负面观察”:

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

参见regex demo

N只有在前面没有紧跟文字C(=O)序列时才会匹配

(?<!...)被称为负前瞻。它不使用字符(不移动regex索引),只检查当前位置之前的字符串中是否缺少某些内容。如果文本匹配,则匹配失败(没有匹配)。详见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)])

相关问题 更多 >