我正在使用以下字符串:
'"name": "Gnosis", \n "symbol": "GNO", \n "rank": "99", \n "price_usd": "175.029", \n "price_btc": "0.0186887", \n "24h_volume_usd": "753877.0"'
Run Code Online (Sandbox Code Playgroud)
并且我必须re.sub()在 python 中使用仅替换"包含数字的双引号 ( ),以便稍后在 JSON 中解析它。我试过一些正则表达式,但没有成功。这是我最好的尝试:
exp = re.compile(r': (")\D+\.*\D*(")', re.MULTILINE)
response = re.sub(exp, "", string)
Run Code Online (Sandbox Code Playgroud)
我已经搜索了很多类似的问题,但没有找到另一个类似的问题。
最后我使用了(感谢S. Kablar):
fomatted = re.sub(r'"(-*\d+(?:\.\d+)?)"', r"\1", string)
parsed = json.loads(formatted)
Run Code Online (Sandbox Code Playgroud)
问题是此端点以 JSON 形式返回格式错误的字符串。
其他用户使用 for 循环回答“首先用 json 解析字符串,然后将数字转换为浮点数”,我认为这是一种非常低效的方法,此外,您将被迫在 int 或 float 类型之间进行选择你的回应。毫无疑问,我已经写了这篇要点,向您展示了不同方法与基准测试之间的比较,现在我将在这种情况下信任正则表达式。
谢谢大家的帮助
正则表达式:替换:"(-?\d+(?:[\.,]\d+)?)" \1
细节:
() 拍摄组(?:) 非捕获组\d匹配一个数字(等于[0-9])+ 一次和无限次之间的匹配? 匹配零次和一次\1 第 1 组。蟒蛇代码:
def remove_quotes(text):
return re.sub(r"\"(-?\d+(?:[\.,]\d+)?)\"", r'\1', text)
remove_quotes('"percent_change_7d": "-23.43"') >> "percent_change_7d": -23.43
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4549 次 |
| 最近记录: |