在Python中使用正则表达式从JSON响应中提取数据

时间:2019-05-13 00:39:32

标签: python json regex

我正在尝试使用Python中的regex从JSON响应中提取字符串,但没有成功。

{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}

我正在尝试

b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA=== 
字符串中的

。但是,字符串中的|不允许我使用我在Stack Overflow上看到的方法,因为它一直缺少|。我将不胜感激。

3 个答案:

答案 0 :(得分:1)

在这里,您可以在字符类中转义特殊字符:

import re
text = '{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}'


match = re.search(r'[|]b.*===[|]', text).group()[1:-1]
print(match)

输出:

b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===

答案 1 :(得分:1)

无需使用正则表达式重新发明json.loads()。使用json.loads()将JSON字符串解析为字典,然后通过索引到字典中来访问您感兴趣的字符串。提取字符串后,分割管道字符并访问列表的第三个索引:

your_json_dict_name["ao"][0].split("|")[3]

这是一个完整的例子:

import json

raw_json_str = r'{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}'
json_dict = json.loads(raw_json_str)

print(json_dict["ao"][0].split("|")[3])

输出:

b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===

答案 2 :(得分:0)

好吧,对于初学者来说,我不太明白为什么您不在此字符串上使用json.loads,因此您可以将此json称为映射并转到“ ao”键,并在其中的字符串上使用正则表达式数组。

但是撇开这一点,如果您仍然可以从json作为字符串提取数据,则可以使用正则表达式组和在“ |”上使用一些转义(“ \”)字符。

看起来像这样的东西

?[\“(。?\ |){3}(。?)\ |。

然后您可以访问组2并获得所需的结果 假设json看起来总是一样

如果“ ao”属性上的数组具有多个字符串,则不会获得第二个值。 因此,我建议先将此字符串转换为map,然后再使每个字符串自行循环。

祝你好运