正则表达式将一个巨大的字符串拆分为多组键值对

2024-05-26 09:20:23 发布

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

我有一个巨大的字符串,它包含许多集合,每个集合由,分隔。每个集合中都有键值对,每对都用&分隔。在

这里有个小例子

tag=43&id=8787&type=video/webm;+codecs="vp8.0,+vorbis"&quality=medium,type=video/webm;+codecs="vp8.0,+vorbis"&quality=medium&tag=172&id=8978,tag=41&type=video/webm;+codecs="vp8.0,+vorbis"&id=1738&quality=medium

此字符串包含以下集合(3个集合,每个集合以,分隔):

^{pr2}$

我想写一个正则表达式来将原始字符串拆分成一组键值对。我试过了

sets = huge_string.split(',')

但显然这行不通,因为在一对键值中还有一个逗号:

type=video/webm;+codecs="vp8.0,+vorbis" # <--- this is causing problem!

在这里,,引起了问题。在

如何编写正则表达式来完成这个任务?我正在使用Python 3.3.1。在

我现在不知道有多少双了


Tags: 字符串idtagvideotypesetsvorbis例子
1条回答
网友
1楼 · 发布于 2024-05-26 09:20:23

我将这样解析response by Youtube API

# content is a str that stores the content of the link
query = urllib.parse.parse_qs(content)

fullurls = query['url_encoded_fmt_stream_map'][0].split(',')
data = [urllib.parse.parse_qs(i) for i in fullurls]
print(data)

这将输出一个dict的列表,其中存储每个链接的所有信息。当然,上面的代码是一个概念的演示。应该减少假设,并在实际代码中添加检查。在

Youtube API返回MIME类型application/x-www-form-urlencoded的响应,因此我们需要使用^{}对其进行解码。在

url_encoded_fmt_stream_map键包含的值是URL编码字符串的逗号分隔列表,因此我们需要将其沿逗号,拆分,并用urllib.parse.parse_qs对每个标记进行解码。不用担心编解码器描述中的逗号,因为它们已经是URL编码的,因此不会干扰拆分。在

相关问题 更多 >