我在python中有这个字符串
{ "rval": 0, "param_size": 4, "param": [ 8, 0, 0, 0 ], "session_id": 4 }
如何以正确的方式过滤此字符串以接收此示例中的数字8?
所有数字和参数都可以更改
我的方法
re.findall('"param": (.+) }',data)[0]
但输出
[ 8, 0, 0, 0 ], "session_id": 4
而不是8
答案 0 :(得分:5)
甚至不打扰它。将字符串转换为Python字典(使用json
或literal_eval
模块),然后只需d['param'][0]
。
from ast import literal_eval
string = '{"rval": 0, "param_size": 4, "param": [ 8, 0, 0, 0 ], "session_id": 4 }'
d = literal_eval(string)
print(d['param'][0])
# 8
答案 1 :(得分:1)
import ast, json
text = '{ "rval": 0, "param_size": 4, "param": [ 8, 0, 0, 0 ], "session_id": 4 }'
JSON:
dict1 = json.loads(text)
dict1["param"][0]
评估:
dict2 = ast.literal_eval(text)
dict2["param"][0]
两个方法都将字符串转换为python dict对象,您可以通过dict[key]
我测试了python2中的所有代码,我相信你的文字中有一些非法字符,所以我推荐使用正则表达式:
import re
text = '{ "rval": 0, "param_size": 4, "param": [ 8, 0, 0, 0 ], "session_id": 4 }'
match = re.search(r'"param": \[ (\d+),', text)
match.group(1)
出:
'8'