在python上为RE添加一个可选的子表达式

时间:2014-09-28 19:04:25

标签: python html findall

如何在python中添加正则表达式的子表达式? 表示某些html代码可能会或可能不会出现在文本中。 这是因为我正在为filmaffinity制作一个API并希望制作一个RE来过滤搜索结果,但我遇到了问题。

在结果的html代码中有一个评分图片,而在其他代码中这不是,那么我会在RE中添加一个子表达式,其中图像出现,它可以采用率对于电影(整数),如果没有,则返回一个空字符串。

例如,这是一个os resoults html:

<div class="mc-title"><a href="/es/film111111.html">Movie Name</a>  (2012)   <img src="/imgs/countries/CF.jpg" title="Country Name"></div>

    <img src="http://www.filmaffinity.com/imgs/ratings/8.png" border="0" alt="Notable" >        <div class="mc-director"><a href="/es/search.php?stype=director&amp;stext=Some+Director">Some Director</a></div>

在这个其他的html代码中不是img标签。

<div class="mc-title"><a href="/es/film000000.html">Another movie name</a>  (2015)   <img src="/imgs/countries/XY.jpg" title="Another Country"></div>

            <div class="mc-director"><a href="/es/search.php?stype=director&amp;stext=Another+Director">Another director</a></div>

所以......我需要一个RE来回复:

>>>R=findall(expression, html_Code)
>>>print R
[('111111', 'Movie Name', '2012', '8', 'Some Director'), ('000000', 'Another Movie Name', '2015', '', 'Another director')]

请注意,在第二个元组中,没有评级...只有&#39;&#39;字符串。

我可怜的RE是这样的:

<div class="mc-title"><a href="/es/film(\d{6}).html">([^<]*)</a>\s*\((\d{4})\)\s*<img src="/imgs/countries/([A-Z]{2}).jpg" title="[^"]*"></div>\s*<img src="http://www.filmaffinity.com/imgs/ratings/(\d+).png" border="0" alt="\w*" ?>\s*<div class="mc-director"><a href="/es/search.php\?stype=director&amp;stext=[\w+]*">[^<]*</a></div>

1 个答案:

答案 0 :(得分:1)

对于解析HTML,我发现BeautifulSoup比使用直接正则表达式更好。还有PyQuery这看起来不错,但我从未使用过它。