如何在 Python 中使用正则表达式提取 JSON 字符串的特定部分?

Posted

技术标签:

【中文标题】如何在 Python 中使用正则表达式提取 JSON 字符串的特定部分?【英文标题】:How can I extract a specific section of a JSON string using a regex in Python? 【发布时间】:2021-12-23 23:16:04 【问题描述】:

所以我有一个看起来像这样的字符串(例如):

"e":"kline","E":1636631940480,"s":"EPSUSDT","k":"t":1636631880000,"T":1636631939999,"s":"EPSUSDT","i":"1m","f":15980499,"L":15980734,"o":"0.56630000","c":"0.57200000","h":"0.57300000","l":"0.56630000","v":"280740.00000000","n":236,"x":true,"q":"159924.80310000","V":"150693.00000000","Q":"85802.85780000","B":"0"

我正在尝试从中提取某些值,假设我希望正则表达式返回 "c":"0.57200000" 或只是 0.57200000 的值。

我尝试了这段代码(至少能够得到“c”),但它什么也没给我:

re.search(r'^\"c\",$', resp) # resp is the string variable

我是正则表达式的新手,即使搜索了 2 个小时,我仍然无法做到...

【问题讨论】:

那不是字符串,就是dict,是什么变量类型保存的? 见ideone.com/eLfqQZ,这是一个有效的JSON。 @azro 哦...很奇怪,因为当我输入 (type(resp)) 它返回 那是因为你在这里粘贴它的方式,当你显示打印的内容时,我们可以认为它是一个字典,最好将'"e":"kline","E":1636631940480,"s"...' but 显示为只有双引号,true(而不是True)我们知道这是一个 JSON 刺 @WiktorStribiżew 好的,现在我明白了,谢谢! 【参考方案1】:

您的字符串是有效的 JSON 内容,因此将其加载为 python 结构:dict,然后使用键 kc 访问数据

import json

value = '"e":"kline","E":1636631940480,"s":"EPSUSDT","k":"t":1636631880000,"T":1636631939999,' \
        '"s":"EPSUSDT","i":"1m","f":15980499,"L":15980734,"o":"0.56630000","c":"0.57200000",' \
        '"h":"0.57300000","l":"0.56630000","v":"280740.00000000","n":236,"x":true,' \
        '"q":"159924.80310000","V":"150693.00000000","Q":"85802.85780000","B":"0"'

value = json.loads(value)
print(value['k']['c'])  # 0.57200000

【讨论】:

好的,谢谢它现在可以工作了 不错。如果你不知道c 是嵌套的,可以使用print(nested_lookup('c', json.loads(value))[0])。不知道有没有更简单的方法。【参考方案2】:

您正试图从dict 而不是字符串中获取一些值。

    dict = "e": "kline", "E":1636631940480,"s":"EPSUSDT","k":"t":1636631880000,"T":1636631939999,"s":"EPSUSDT","i":"1m","f":15980499,"L":15980734,"o":"0.56630000","c":"0.57200000","h":"0.57300000","l":"0.56630000","v":"280740.00000000","n":236,"x":True,"q":"159924.80310000","V":"150693.00000000","Q":"85802.85780000","B":"0"

print(dict["k"]["c"])

【讨论】:

我不知道我是否做错了什么,但它返回“TypeError:字符串索引必须是整数” 您可以在这里添加您的代码,我们可以查看它,看看有什么问题? 没关系,我找到了问题,您的解决方案也有效^^谢谢!

以上是关于如何在 Python 中使用正则表达式提取 JSON 字符串的特定部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中使用正则表达式从同一个字符串中提取多个值?

如何在python中使用正则表达式提取每行中需要的信息

如何使用 python/django 从字符串中提取 url?(使用正则表达式)

请问如何使用python的正则表达式提取url链接?

在python中使用正则表达式提取日期

Python正则表达式 | 如何只提取中文英文字母数字(含科学计数法)