首页 > 解决方案 > 如何编写两个断言都必须为真的python正则表达式否定环视?

问题描述

所以我试图匹配某个缩写的所有出现XYZ,但前提是它们两边都没有用括号括起来。字符串XYZ filler text(XYZ filler text)(Filler text XYZ)都应该匹配,而字符串(XYZ)不应该匹配。

我能得到的最接近的是

(?<!\()XYZ(?!\))

当然,这样做的问题是,如果任何一个否定断言都匹配,那么整个事情就不再匹配了。我该怎么办?谢谢!

标签: pythonregex

解决方案


您可以或 ( |) 正则表达式:

(?<!\()XYZ|XYZ(?!\))

示例

import re

lst = ['XYZ filler text', '(XYZ filler text)', '(Filler text XYZ)', '(XYZ)']

for x in lst:
    print(re.search(r'(?<!\()XYZ|XYZ(?!\))', x))

输出:

<re.Match object; span=(0, 3), match='XYZ'>
<re.Match object; span=(1, 4), match='XYZ'>      
<re.Match object; span=(13, 16), match='XYZ'>     
None

推荐阅读