需要在正则表达式中为Python提供建议
通过服务器的API请求接收的数据。要分析的数据:需要在正则表达式中为Python提供建议,python,regex,Python,Regex,通过服务器的API请求接收的数据。要分析的数据: b'{"Id":"9e46ba44-2b89-4f9d-88eb-5b5dcfe908e0","Name":"\xd0\x9a\xd0\xb0\xd0\xbd\xd0\xb0\xd0\xbb 89","AltEnabled":true,"ReceiveVideoMbps":2.6148132324218749,"ReceiveAltVideoMbps":0.18560943603515626,"WriteVideoMbps":2.58099691
b'{"Id":"9e46ba44-2b89-4f9d-88eb-5b5dcfe908e0","Name":"\xd0\x9a\xd0\xb0\xd0\xbd\xd0\xb0\xd0\xbb 89","AltEnabled":true,"ReceiveVideoMbps":2.6148132324218749,"ReceiveAltVideoMbps":0.18560943603515626,"WriteVideoMbps":2.5809969113862512,"Status":"Ok"}'
b'{"Id":"ef666ea5-fe40-4c9c-8953-1b2c5ddda4ad","Name":"\xd0\x9a\xd0\xb0\xd0\xbd\xd0\xb0\xd0\xbb 68","AltEnabled":true,"ReceiveVideoMbps":0.33305744615277988,"ReceiveAltVideoMbps":0.0349517822265625,"WriteVideoMbps":0.33188474615605063,"Status":"Ok"}'
这个正则表达式给我“Id”和“Name”:
regex=b“{\'Id\”:\”(?P.*?\”,\“Name\”:\”(?P.*?)
但我无法解析“ReceiveVideoMbps”参数
如何更新正则表达式以开始解析“ReceiveVideoMbps”参数?我将正则表达式用作:
regex = r"{\"Id\":\"(?P<id>.*?)\",\"Name\":\"(?P<name>.*?)\",.*,\"ReceiveAltVideoMbps\":(?P<rec>.*?),.*"
使用
JSON
而不是re
可以有效地解析此类字符串
我向您展示了两种方法。但是,在执行任何解析之前,您需要使用decode()
方法将字节
对象转换为字符串
等价物
正则表达式方式
代码
重新导入
x=b'{“Id”:“9e46ba44-2b89-4f9d-88eb-5b5dcfe908e0”,“名称”:“\xd0\xA0\xd0\xbd\xd0\xb0\xb0\xd0\xd0\xb0\xb0\xb0\xb0\xb0\xb0\xb0\xb0\xb0\xbb\xbb 89”,“AltEnabled”:true,“ReceiveVideoMbps”:2.6148132324218749,“ReceiveVideoMbps”:0.18560943603515626,“WriteVideoMbps”:2.5809969113862512,“状态”:”
regex=re.compile(r“{”Id\“:\”(?P.*?\”,\“Name\”:\“(?P.*?\”,.*,\“ReceiveVideoMbps\”:(?P.*?,*))
items=regex.findall(x.decode())
打印(项目)
输出
输出将是一个元组列表
[('9e46ba44-2b89-4f9d-88eb-5b5dcfe908e0', 'Канал 89', '2.6148132324218749')]
JSON方式
代码
导入json
x=b'{“Id”:“9e46ba44-2b89-4f9d-88eb-5b5dcfe908e0”,“名称”:“\xd0\xA0\xd0\xbd\xd0\xb0\xb0\xd0\xd0\xb0\xb0\xb0\xb0\xb0\xb0\xb0\xb0\xb0\xbb\xbb 89”,“AltEnabled”:true,“ReceiveVideoMbps”:2.6148132324218749,“ReceiveVideoMbps”:0.18560943603515626,“WriteVideoMbps”:2.5809969113862512,“状态”:”
items=json.loads(x.decode())
打印(项目)
输出
输出为字典
{'AltEnabled': True,
'Id': '9e46ba44-2b89-4f9d-88eb-5b5dcfe908e0',
'Name': 'Канал 89',
'ReceiveAltVideoMbps': 0.18560943603515626,
'ReceiveVideoMbps': 2.614813232421875,
'Status': 'Ok',
'WriteVideoMbps': 2.580996911386251}
现在,您可以使用dict
键访问元素
示例
打印(项目['Id')#9e46ba44-2b89-4f9d-88eb-5b5dcfe908e0
打印(项目[‘名称])#kааааа89
打印(项目['ReceiveVideoMbps'])#2.614813232421875
这个字符串没有被解析为JSON有什么特别的原因吗?你想用JSON而不是regex来解析整个字符串吗?如果是的话,我可以提供帮助。regex最适合这样一个简单的任务。但是谢谢你提醒我JSON!我忘了。通过API接收的数据通常是JSON格式的,所以这是处理JSON的最好方法Regex绝对不是解析JSON的最佳选择;JSON解析器是。很好!很好。谢谢。谢谢你的建议!这是一个全面的解决方案。如果它解决了你的问题,请将答案标记为Accepted@Evgeny,如果你觉得它很全面,你应该接受这个答案。
[('9e46ba44-2b89-4f9d-88eb-5b5dcfe908e0', 'Канал 89', '2.6148132324218749')]
{'AltEnabled': True,
'Id': '9e46ba44-2b89-4f9d-88eb-5b5dcfe908e0',
'Name': 'Канал 89',
'ReceiveAltVideoMbps': 0.18560943603515626,
'ReceiveVideoMbps': 2.614813232421875,
'Status': 'Ok',
'WriteVideoMbps': 2.580996911386251}