python - 如何编写一个 python 正则表达式否定环视,其中两个断言都必须为真?

标签 python regex

所以我试图匹配某个缩写 XYZ 的所有出现,但前提是它们两边没有用括号括起来。字符串 XYZ 填充文本(XYZ 填充文本)(填充文本 XYZ) 应全部匹配,并且字符串 ( XYZ) 不应匹配。

我能得到的最接近的是

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

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

最佳答案

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

(?<!\()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

关于python - 如何编写一个 python 正则表达式否定环视,其中两个断言都必须为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56809475/

相关文章:

python - sys.path什么时候修改?

python - 在 python 中计时排序算法

python - 使用递归获取Python中列表的长度

java - 如何建立一个模型来区分关于 Apple (Inc.) 的推文和关于苹果 (fruit) 的推文?

python - 使用 setup.py 安装新的正则表达式模块

python - 在Python中抓取<table>TABLE I NEED</table>之间的所有文本

c# - 使用正则表达式捕获两个单词之间的文本

objective-c - 如何使用 NSRegularExpression 删除字符串中的括号单词?

c# - 从字符串中删除特定单词

php - 匹配包含两个 "needles"的字符串