我正在处理以下字符串:
'"name": "Gnosis", \n "symbol": "GNO", \n "rank": "99", \n "price_usd": "175.029", \n "price_btc": "0.0186887", \n "24h_volume_usd": "753877.0"'
我需要在Python中使用re.sub()
函数,仅替换括住数字的双引号("
),以便稍后在JSON中解析。我尝试了一些正则表达式,但没有成功。以下是我最好的尝试:
exp = re.compile(r': (")\D+\.*\D*(")', re.MULTILINE)
response = re.sub(exp, "", string)
我已经搜索了很多类似的问题,但没有找到另一个类似的问题。
编辑:
最终我使用了(感谢S. Kablar):
fomatted = re.sub(r'"(-*\d+(?:\.\d+)?)"', r"\1", string)
parsed = json.loads(formatted)
问题在于此端点返回的JSON格式不正确。
其他用户回答说:“首先用json解析字符串,然后使用for循环将数字转换为浮点数”,我认为这是一种非常低效的方法,而且你将被迫选择响应的整数或浮点数类型。为了消除疑虑,我写了这个代码片段,展示了不同方法之间的比较和基准测试,目前我要相信正则表达式在这种情况下的作用。
感谢大家的帮助。
json.loads('{' + yourstring + '}')
并检查一下呢? - Jon Clements"\"43"
将会被您的正则表达式替换损坏。永远不要在结构化数据上使用正则表达式;请使用预期的解析器。 - Daniel