2014-09-28 39 views
0

如何在python中添加正則表達式的子表達式? 指示某些html代碼可能會或可能不會顯示在文本中。 這是因爲我正在爲Filmaffinity製作一個API,並且想要使用RE來過濾搜索結果,但是我遇到了問題。在python上爲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')] 

注意的是,在第二元組,沒有評級...只有一個「」串。

我可憐的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> 
+0

解析HTML的正則表達式?壞想法(tm)。 – isedev 2014-09-28 19:06:13

回答

1

分析HTML,我發現BeautifulSoup比用直正則表達式更好。還有PyQuery這看起來不錯,但我從來沒有用過它。

相關問題