例如,如果有一个视频网站有搜索选项。
http://example.com/search=query
并以该格式返回所有搜索结果:
<a href="LinkToVideo"</a><img src="ImageSource" alt="AltDescription"><b>VideoName</b>
我想使用此数据,因此我向网站发送请求,然后使用re
返回包含LinkToVideo
,ImageSource
,AltDescription
的列表, 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')]
我知道我可以忽略这一点,但它是真正的网站(这只是一个例子),列表要大得多,我需要忽略更多的数据。
我搜索谷歌并没有找到解决方案。对不起,如果标题没有准确描述问题。
感谢
答案 0 :(得分:2)
使用非捕获组((?:…)
),如下所示:
'<a href="(.+?)"</a><img src="(.+?)" alt="(?:.+?)"><b>(.+?)</b>'
或者完全摆脱这个群体:
'<a href="(.+?)"</a><img src="(.+?)" alt=".+?"><b>(.+?)</b>'
我还应该指出,使用正则表达式来解析任意HTML是一个非常糟糕的主意,cause madness已经知道了。我强烈建议您使用正确的html parser。