2014-05-17 94 views
-1

我有此格式的网页的源代码:为什么不是这个正则表达式的工作

<span class="l r positive-icon"> 
Turkish 
</span> 
<span> 
The.Mist[2007]DvDrip[Eng]-aXXo 
</span> 
<span class="l r neutral-icon"> 
Vietnamese 
</span> 
<span> 
The.Mist.2007.720p.Bluray.x264.YIFY 
</span> 

正如你所看到的,有两种与类“LR正图标”的跨越或“lr neutral-icon”。我只想得到语言,所以跨度与任何课程之间的一切。我使用这个正则表达式,但它给了我一个空的列表:

allLanguages = re.findall('<span class=".*">\s(.*)\s</span>', allLanguagesTags) 

allLanguagesTags包含上面显示的源代码。任何人都可以给我一个提示吗?

+3

为什么不使用一个实际的HTML解析器解析这个?试图从正则表达式的HTML中提取信息已知[导致一些问题](http://stackoverflow.com/q/1732348)。 –

+0

适用于我:['Turkish','越南语'] – Josh

+0

@MartijnPieters我正在使用BeautifulSoup获得所有​​s的“a1”类,但我不知道如何从内部提取内容BeautifulSoup的标签,所以我使用正则表达式。 – jvitasek

回答

3

请勿使用正则表达式。使用实际的HTML解析器。我建议你使用BeautifulSoup代替:

from bs4 import BeautifulSoup 

soup = BeautifulSoup(yourhtml) 
languages = [s.get_text().strip() for s in soup.find_all('span', class_=True)] 

演示:

>>> from bs4 import BeautifulSoup 
>>> soup = BeautifulSoup('''\ 
... <span class="l r positive-icon"> 
... Turkish 
... </span> 
... <span> 
... The.Mist[2007]DvDrip[Eng]-aXXo 
... </span> 
... <span class="l r neutral-icon"> 
... Vietnamese 
... </span> 
... <span> 
... The.Mist.2007.720p.Bluray.x264.YIFY 
... </span> 
... ''') 
>>> [s.get_text().strip() for s in soup.find_all('span', class_=True)] 
[u'Turkish', u'Vietnamese'] 
+0

谢谢,太好了! – jvitasek

+0

爱你的汤,Martijn。 +1 :) – zx81

相关问题