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

2024-09-27 19:20:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法从匹配对象获取第二个匹配项。你知道吗

编辑:找到修复程序

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

我试图看看match对象是否在同一个组(即组(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))

我希望得到14.69在组(0)和0.31从组(1),但我得到14.69两次。有人有什么想法吗?你知道吗

谨致问候


Tags: and对象inreifgroupbuyfloat
1条回答
网友
1楼 · 发布于 2024-09-27 19:20:35

只有一个捕获组([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

相关问题 更多 >

    热门问题