我对正则表达式有一点经验,现在我有一点问题。
我必须检索。
之间的字符串所以这是一个示例:
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, 那怎么能这样做呢?
感谢。
答案 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是否有所不同甚至有些不正确。