我通过Python使用对Shoutcast服务器的请求来获取此字符串:
BEST SHOW EVER http://www.myradio.foo/xml/logos/showlogo.jpg Avicii Hey Brother
我想要一个包含此词的词典:
mystring[showtitle] = 'BEST SHOW EVER'
mystring[image] = 'http://www.myradio.foo/xml/logos/showlogo.jpg'
mystring[song] = 'Avicii hey brother'
字符串始终是ASCII,任何内容都可以在链接之前和之后写入。
我该如何解析?我想我需要使用正则表达式,但我听说它们不是很快。
此外,标题需要一些调整,看起来更漂亮。
Avicii嘿兄弟
变为
Avicii - 嘿兄弟
你会怎样做才能做到这一点?我想在iTunes上搜索标题并从第一个结果中获取所有数据,但我不知道该怎么做(iTunes API的所有链接都将我重定向到Apple SDK,我不想使用)。
答案 0 :(得分:1)
是的,所以你可以像这样指定字典:
>>> s = 'BEST SHOW EVER http://www.myradio.foo/xml/logos/showlogo.jpg Avicii hey brother'
>>> mystring = dict(zip(('showtitle', 'image', 'song'), re.search('(.+) (http:.+?) (.+)', s).groups()))
>>> mystring
{'image': 'http://www.myradio.foo/xml/logos/showlogo.jpg', 'showtitle': 'BEST SHOW EVER', 'song': 'Avicii Hey Brother'}
然后你可以通过这样做来“美化”song
项:
>>> mystring[song] = out[song].title()
>>> mystring[song]
'Avicii Hey Brother'
答案 1 :(得分:0)
我错了dict()
这是将其转换为dict的更新解决方案。
response = '''BEST SHOW EVER http://www.myradio.foo/xml/logos/showlogo.jpg Avicii Hey Brother'''
## parsing using named group
m = re.match("(?P<showtitle>.*?)\s+(?P<image>https?://\S+)\s+(?P<song>.+)", response);
mystring = m.groupdict()
print mystring['song']
您无法始终在格式上转换歌曲名称。因为您不知道哪一个是歌曲名称,或者哪个专辑名称。如果它总是固定第一个单词是专辑名称,那么你可以这样做:
print re.sub("^(\S+)\s", "\\1 - ", mystring['song'])