regex 多模式正则表达式只返回一个模式的结果

nhhxz33t  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(111)

我无法想象这是一个很难的问题,但我很难在网上找到解决方案。
我试图在一个字符串中找到价格,有时欧元符号存在,有时不存在,所以我在正则表达式中搜索这两种情况。然而,在下面的例子中,我的正则表达式只返回'€6'而不是'6'。我认为正则表达式中多个模式的顺序很重要,所以有(?<=for €)(.)first应该会导致这段代码返回'6',但它没有。
如果我使用re.findall,它似乎也不会只选择'6',这段代码唯一有效的情况是如果我删除选项(?<=for)(.
)完全来自正则表达式。
任何帮助更好地理解这个问题是非常感谢!

import re

deal = '2 for €6'
price = (re.search(r"(?<=for €)(.*)|(?<=for )(.*)", deal.lower()))[0]

print(price)

字符串

owfi6suc

owfi6suc1#

您Assert从当前位置向左必须是for €for
因此,每次向右移动1个位置,Assert(?<=for(?<=for €变为true之前变为true,并且由于(.*),您将匹配(捕获)€6
请注意,如果您切换备选项的顺序,此匹配不会更改,因为在这种情况下,两个备选项都将被测试。
Regex demo
或者,如果您希望两个值都在2个捕获组中(注意.*匹配整行,\d+匹配1+位):

for (?=(€(\d+)))

字符串
Regex demo

相关问题