使用正则表达式删除包含数字的双引号

Álv*_*jar 4 python regex

我正在使用以下字符串:

'"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 类型之间进行选择你的回应。毫无疑问,我已经写了这篇要点,向您展示了不同方法与基准测试之间的比较,现在我将在这种情况下信任正则表达式。

谢谢大家的帮助

Srd*_* M. 6

正则表达式替换"(-?\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)