2

多くのセットを含む巨大な文字列があり、それぞれが で区切られてい,ます。各セットにはキーと値のペアがあり、各ペアは で区切られてい&ます。

ここに小さな例があります、

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 つのセット、それぞれを で区切ります,):

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

元の文字列をキーと値のペアのセットに分割する正規表現を作成したいと考えています。私はこれを試しました、

sets = huge_string.split(',')

ただし、 1 つのキーと値のペア内にもコンマがあるため、明らかにこれは機能しません。

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

ここで,問題が発生しています。

このタスクを達成するための正規表現の書き方 を使用してPython 3.3.1います。

ペアがいくつ、どのような順序で存在するかはわかりません。

4

1 に答える 1

3

これは、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ために を使用する必要があります。urllib.parse.parse_qs

url_encoded_fmt_stream_mapキーには、 URL エンコードされた文字列のカンマ区切りのリストである値が含まれているため、カンマに沿って分割し、各トークンを でデコードする必要があります。コーデックの説明に含まれるコンマについては心配する必要はありません。これらは既に URL エンコードされているため、分割に干渉することはありません。,urllib.parse.parse_qs

于 2013-05-06T10:14:33.667 に答える