2013-07-07 137 views
1

我是一个业余程序员,也是本网站的新成员。我已经搜索了这个问题,但没有在互联网或本网站的其他任何地方找到它。Python正则表达式查找语句

我试图抓住开放和接近段落html标记之间的所有单词(<p> & </p>)。我的findall语句适用于特定在线文章所有段落中的所有单词,除了单引号或双引号之外。完全有可能有更好的方法来做我想做的事情,或者可以很容易地调整这个陈述以包含带引号的段落。任何建议将不胜感激!

的findall声明:

aText = findall("<p>[A-Za-z0-9<>=\"\:/\.\-,\+\?#@'<>;%&\$\*\^\(\)\[\]\{\}\|\\!_`~ ]+</p>",text) 
+1

步骤1)在你喜欢的搜索引擎“美丽的汤”的搜索。第2步)按照其中一个清晰的示例从HTML元素中提取文本。没有第3步,它实际上是一个相当优雅的图书馆,只是为了这个目的:) –

回答

1
>>> t = "<p>there isn't much here</p>" 
>>> re.findall(r'<p>(.+?)</p>',t) 
["there isn't much here"] 

例与"的嵌入式:

>>> t = r"<p>there isn't much \"to go by\" here</p>" 
>>> re.findall(r'<p>(.+?)</p>',t) 
['there isn\'t much \\"to go by\\" here'] 

通常+贪婪预选赛中,通过在结尾处增加?我们使它非贪心,它试图实现一个最小匹配。所以它会消耗部分字符串,直到</p>可以匹配。

+0

这将工作(我投票表示正确性),但您需要谨慎对待其限制。结束'

'标签是可选的(尽管如果缺失无效)和'

'元素可以具有像'id'和'class'这样的属性来打破这个正则表达式。 –

+0

谢谢!我会upvote,但它需要15个信誉点 – user2557391

+0

@JasonSperske谢谢,我没有想到这一点。 – HennyH

1

要与像美丽的汤的HTML解析引擎做到这一点:

from BeautifulSoup import BeautifulSoup 

html_doc= """ 
<p> 
paragraph 1 
</p> 

<p> 
paragraph 2 
</ap> 

<p> 
paragraph 3 
</p> 
""" 

soup = BeautifulSoup(html_doc) 

soup.findAll('p')