我无法想象这是一个很难的问题,但我很难在网上找到解决方案。
我试图在一个字符串中找到价格,有时欧元符号存在,有时不存在,所以我在正则表达式中搜索这两种情况。然而,在下面的例子中,我的正则表达式只返回'€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)
字符串
1条答案
按热度按时间owfi6suc1#
您Assert从当前位置向左必须是
for €
或for
因此,每次向右移动1个位置,Assert
(?<=for
在(?<=for €
变为true之前变为true,并且由于(.*)
,您将匹配(捕获)€6请注意,如果您切换备选项的顺序,此匹配不会更改,因为在这种情况下,两个备选项都将被测试。
Regex demo
或者,如果您希望两个值都在2个捕获组中(注意
.*
匹配整行,\d+
匹配1+位):字符串
Regex demo的