自动完成歌曲标题和解析字符串

时间:2014-03-24 16:42:04

标签: python regex parsing itunes-store

我通过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,我不想使用)。

2 个答案:

答案 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'])