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

2024-04-19 06:51:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 方法字符串reiddata参数sizeparam
2条回答
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中测试了所有代码,我相信您的文本中有一些非法字符,因此我建议使用regex:

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'

甚至不用费心去调整它。将字符串转换为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

相关问题 更多 >