如何从搜索对象中检索第二个值?

时间:2019-07-14 15:45:46

标签: python regex

我无法从比赛对象获得第二场比赛。

编辑:找到了解决方法

ptrn_buy_in = re.compile("(?<=[$€£])([0-9]+[.,][0-9]+)")
buy_in = re.findall(ptrn_buy_in, lines[0])
if buy_in[1] and buy_in[2]:
    parsed_hand["metadata"]["buy_in"] = float(buy_in[1])
    parsed_hand["metadata"]["rake"] = float(buy_in[2])

我的字符串是:$ 14.69 + $ 0.31

我试图查看匹配对象是否实际上在同一组中拥有更多值,即.group(0)[0]和[1]。实际上,这给了我数字的第二个数字,所以根本不符合我的期望。

ptrn_buy_in = re.compile("(?<=[$€£])([0-9]+.[0-9]+)")
buy_in = re.search(ptrn_buy_in, lines[0])
if buy_in.group(0) and buy_in.group(1):
    parsed_hand["metadata"]["buy_in"] = float(buy_in.group(0))
    parsed_hand["metadata"]["rake"] = float(buy_in.group(1))

我期望在.group(0)中获得14.69,从.group(1)中获得0.31,但是我两次获得14.69。有人有什么想法吗?

亲切的问候

1 个答案:

答案 0 :(得分:1)

只有1个捕获组([0-9]+.[0-9]+)可以匹配1+位数字,任何字符1倍,再匹配1+位数字。

re.search返回一个MatchObject,其中。group(0)返回整个匹配项,而.group(1)返回第一个捕获组。这就是为什么您两次获得14.69。

您必须对点进行转义以使其在字面上匹配。但是当您使用正向后视时,您可以省略组并仅获得匹配:

(?<=[$€£])[0-9]+\.[0-9]+

ptrn_buy_in = re.compile("(?<=[$€£])[0-9]+\.[0-9]+")
print(re.findall(ptrn_buy_in, r"$14.69+$0.31"))

Regex demo | Python demo

结果

['14.69', '0.31']

或与捕获组匹配:

[$€£]([0-9]+\.[0-9]+)

Regex demo | Python demo