忽略正则表达式中的字符串变量

时间:2014-07-29 21:01:56

标签: regex python-2.7

例如,如果有一个视频网站有搜索选项。

http://example.com/search=query

并以该格式返回所有搜索结果:

<a href="LinkToVideo"</a><img src="ImageSource" alt="AltDescription"><b>VideoName</b>

我想使用此数据,因此我向网站发送请求,然后使用re返回包含LinkToVideoImageSourceAltDescription的列表, VideoName

response = urllib2.urlopen("http://example.com/search=" + query)
resp = response.read()
search_list = re.compile('<a href="(.+?)"</a><img src="(.+?)" alt="(.+?)"><b>(.+?)</b>').findall(resp)
return search_list

并返回如下列表:

[('example.com/video1.mp4', 'example.com/image1.jpg', 'blah blah ', 'Cats'),('example.com/video2.mp4', 'example.com/image2.jpg', 'blah', 'Dogs'),('example.com/video3.mp4', 'example.com/image3.jpg', 'blah blah blah', 'Zebra')]

问题是我需要alt描述,但它会改变。

我希望该列表看起来像这样:

[('example.com/video1.mp4', 'example.com/image1.jpg', 'Cats'), ('example.com/video2.mp4', 'example.com/image2.jpg', 'Dogs'), ('example.com/video3.mp4', 'example.com/image3.jpg','Zebra')]

我知道我可以忽略这一点,但它是真正的网站(这只是一个例子),列表要大得多,我需要忽略更多的数据。

我搜索谷歌并没有找到解决方案。对不起,如果标题没有准确描述问题。

感谢

1 个答案:

答案 0 :(得分:2)

使用非捕获组((?:…)),如下所示:

'<a href="(.+?)"</a><img src="(.+?)" alt="(?:.+?)"><b>(.+?)</b>'

或者完全摆脱这个群体:

'<a href="(.+?)"</a><img src="(.+?)" alt=".+?"><b>(.+?)</b>'

我还应该指出,使用正则表达式来解析任意HTML是一个非常糟糕的主意,cause madness已经知道了。我强烈建议您使用正确的html parser