Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要在正则表达式中为Python提供建议_Python_Regex - Fatal编程技术网

需要在正则表达式中为Python提供建议

需要在正则表达式中为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

通过服务器的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.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}