Python Regex Findall声明

时间:2013-07-07 03:16:51

标签: regex python-3.x findall

我有点像业余程序员和这个网站的新手。我已经搜索过这个问题,但是没有在互联网或本网站的其他地方找到它。

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

findall声明:

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

2 个答案:

答案 0 :(得分: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>可以匹配。

答案 1 :(得分: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')