Python在字符串foo:with regex后面提取数字

2024-09-30 23:43:44 发布

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

我有这样的数据: {"address": "1GocfVCWTiRViPtqZetcX4UiCxnKxgTHwK", "balance": 1234, "pending_balance": 0, "paid_out": 0}

我想在平衡后提取数字,但它可以是从0到无穷大。你知道吗

因此,从上面的例子可以看出所需的输出:

1234

顺便说一句,还有一个问题。 我有这样的数据 {"address": "1GocfVCWTiRViPtqZetcX4UiCxnKxgTHwK", "invoice": "invNrKU2ZFMuAJKUiejyVe3X34ybP9awyWZBfUEdY2dZKxYTB8ajW", "redeem_code": "BTCvQDD9xFYHHDYNi1JYeLY1eEkGFBFB49qojETjLBZ2CVYyPm56B"} 通常的做法是什么:

strs = repr(s)  
address = s[13:47]
invoice = s[62:115]
redeem_code = s[134:187]
print(address)
print(invoice)
print(redeem_code)

谢谢你的帮助。你知道吗


Tags: 数据addresscode数字invoiceout例子print
3条回答

实际上,你给我们看的是Python中所谓的字典。 这是一组键和值。你知道吗

在这里查看更多信息:https://docs.python.org/3.6/tutorial/datastructures.html#dictionaries

您的词典具有以下键和值:

"address"  > "1GocfVCWTiRViPtqZetcX4UiCxnKxgTHwK"
"balance"  > 1234
"pending_balance"  > 0
"paid_out"  > 0

如果你有一本字典:

d = {"address": "1GocfVCWTiRViPtqZetcX4UiCxnKxgTHwK", "balance": 1234, "pending_balance": 0, "paid_out": 0}

print(d.get('balanace')) #1234

但是,如果您拥有的是一个包含该信息的外部文件,或者是从某种web服务获得的,那么您就拥有一个字典的字符串表示。以下是JSON库的价值所在:

import json

# Assuming you got a string
s = '{"address": "1GocfVCWTiRViPtqZetcX4UiCxnKxgTHwK", "balance": 1234, "pending_balance": 0, "paid_out": 0}'
d = json.loads(s) # <  converts the string to a dictionary

print(d.get('balance')) #1234

您的数据看起来像json,因此最好的处理方法是使用json模块进行解析

import json
parsed_data = json.loads(data)
balance = parsed_data['balance']

如果必须使用正则表达式,可以使用以下代码

import re
match = re.search('"balance": (\d+)', data)
balance = int(match.group(1))

在本例中,我使用\d+匹配数字字符串和括号来创建一个组。组0是整个匹配字符串,组1是我们创建的第一个组。你知道吗

不要用regex来解析这样的结构化数据。一旦用适当的方法进行解析(json.loadsast.literal_eval两者都在这里工作),它们就变成了本机python结构,很容易访问。你知道吗

在本例中,在一行中使用json.loads

import json

print(json.loads('{"address": "1GocfVCWTiRViPtqZetcX4UiCxnKxgTHwK", "balance": 1234, "pending_balance": 0, "paid_out": 0}')["balance"])

结果:

1234

(同样的方法也适用于第二个问题)

相关问题 更多 >