python正则表达式只检索一个组

时间:2010-09-21 00:03:24

标签: python regex

我对正则表达式有一点经验,现在我有一点问题。

我必须检索。

之间的字符串

所以这是一个示例:

Categories: <a href="/car/2/page1.html">2</a>, <a href="/car/nissan/">nissan</a>,<a href="/car/all/page1.html">all</a>

这是我的小正则表达式:

re.findall("""<a href=".*">.*</a>""",string)

嗯,它有效,但我只想要的是字符串,而不是href, 那怎么能这样做呢?

感谢。

2 个答案:

答案 0 :(得分:2)

使用括号构成捕获组:

'<a href=".*">(.*)</a>'

您可能还想使用non-greedy量词来避免匹配远远超过您的预期。

'<a href=".*?">(.*?)</a>'

结果:

['2', 'nissan', 'all']

甚至更好,请考虑使用HTML解析器,例如BeautifulSoup

答案 1 :(得分:1)

正则表达式从来不是解析HTML的好主意。有太多边缘情况使得制作强大的正则表达式变得困难。请考虑以下完美的浏览器可查看链接:

< a href="/car/all/page1.html">all</a>
<a  href="/car/all/page1.html">all</a>
<a href= "/car/all/page1.html">all</a>
<a id="foo" href="/car/all/page1.html">all</a>
<a
 href="/car/all/page1.html">all</a>

所有这些都不会与给定的正则表达式匹配。我强烈推荐使用HTML解析器,例如Beautiful Soup或lxml。这是一个lxml示例:

from lxml import etree

html = """
Categories: <a href="/car/2/page1.html">2</a>, <a href="/car/nissan/">nissan</a>,<a href="/car/all/page1.html">all</a>
"""
doc = etree.HTML(html)
result = doc.xpath('//a[@href]/text()')

结果:

['2', 'nissan', 'all']

无论HTML是否有所不同甚至有些不正确。