将href值与正则表达式匹配

时间:2013-03-13 13:04:00

标签: python regex

我的输入与此相似:

<a href="link">text</a> <a href="correctLink">See full summary</a>

从此字符串中我只想获得correctLink查看完整摘要的链接为文本)。

我正在使用python,我尝试过:

re.compile( '<a href="(.*?)">See full summary</a>', re.DOTALL | re.IGNORECASE )

但我使用findall()获得的唯一字符串是link">text</a> <a href="correctLink

我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

将链接模式限制为非引号字符:

re.compile('<a href="([^"]+?)">See full summary</a>', re.DOTALL | re.IGNORECASE)

,并提供:

>>> import re
>>> patt = re.compile('<a href="([^"]+?)">See full summary</a>', re.DOTALL | re.IGNORECASE)
>>> patt.findall('<a href="link">text</a> <a href="correctLink">See full summary</a>')
['correctLink']

更好的是,使用正确的HTML解析器。

使用BeautifulSoup,找到该链接就像以下一样简单:

soup.find('a', text='See full summary')['href']

用于精确的文字匹配:

>>> from bs4 import BeautifulSoup
>>> soup=BeautifulSoup('<a href="link">text</a> <a href="correctLink">See full summary</a>')
>>> soup.find('a', text='See full summary')['href']
u'correctLink'