如何以正确的方式过滤字符串以接收包含的内容?

时间:2017-01-08 15:41:47

标签: python python-2.7

我在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

2 个答案:

答案 0 :(得分:5)

甚至不打扰它。将字符串转换为Python字典(使用jsonliteral_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]

访问此dict对象

我测试了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'