正则表达式捕获具有歧义逻辑OR的组

问题描述 投票:0回答:1

我有一种情况,可简化为以下内容:

>>> print(re.findall(r'^[^=]+(!=|=)[^=]+$', "key!=value")[0])
=
>>>

但是我试图匹配“!=”。正则表达式引擎应看到“!”而不是之前的东西。我看到我的表达模棱两可,因为它有两个解决方案,一个是引擎完成的匹配,另一个是我希望它返回的解决方案。

我可以排除要在此前后使用的字符,但是有没有办法告诉正则表达式引擎使用组中最长的字符串对解决方案进行优先级排序?

python regex python-regex
1个回答
0
投票

您的问题是您的正则表达式过于贪婪:

r'^[^=]+(!=|=)[^=]'

[^=]+贪婪地匹配'!'直到找到'='。

应该是:

r'^[^=]+?(!=|=)[^=]'
© www.soinside.com 2019 - 2024. All rights reserved.