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

标签 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-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

关于python - 如何从搜索对象中检索第二个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57028880/

相关文章:

python - 如何删除数据框列中的字符串子串?

Python argparse 默认字符串值

python - 如何使用python写入特定位置的文件?

python - 尝试从 Github 页面抓取数据

python - Celery 在将我的查询集 obj 作为参数传递时引发错误

javascript - 将 HREF 替换为标签之间的内容(使用电子邮件表达式)

regex - PowerShell RegEx:从字符串获取SID

python - 访问 Scapy 的内部协议(protocol)层

java - 寻找类似于拼写检查器的API

c# - 用于查找和删除重复单词的正则表达式