如何使用python正则表达式查找特定字符串

时间:2012-08-20 01:49:04

标签: python html regex

我有这个HTML:

<li class="news_list_bo"><a href="/news_view.php?article_id=2752">URLHunter 프로그램 버퍼오버플로우 취약점 발견!</a>
<ul class="new_liview">
    <li class="img"><a href="/news_view.php?article_id=2752"><img height="45" width="65" src="/image_article/458226972502b655fa1b7b.jpg" /></a></li>                         
    <li class="text"><a href="/news_view.php?article_id=2752">웹페이지를 구성하는 그림파일, 플래쉬파일, 미디어파일들과 같은 구성요소를 사용자에게 보여주는 URLHunter 프로그램에서 버퍼오...</a></li>
</ul>

我正在尝试检索a标签中的文字,如下所示:

>>> tmp_title = re.findall(r'<a href="/news_view.php?article_id=[0-9]+">(.*?)</a>',tmp_str,re.I|re.DOTALL)'

然而,它没有找到任何东西:

>>> print tmp_title
[]

如何找到<li class="text"><a href="/news_view.php?article_id=2752"></a></li>之间的文字?

1 个答案:

答案 0 :(得分:2)

我建议使用像Beautiful Soup这样的HTML解析器来处理大部分内容,而不是试图纠正正则表达式来完成所有操作。但是,正则表达式可能适用于在解析HTML后匹配URL。

我们可以从构造正则表达式开始,以匹配您想要的URL。您的问题是?在正则表达式中具有特殊含义。如果你需要字面上匹配?,你需要逃避它。无论如何,这是一个匹配所需URL的正则表达式:

^/news_view\.php\?article_id=[0-9]+$

当您需要查找字符串时,您可以先将HTML解析为汤:

soup = bs4.BeautifulSoup(html)

请参阅the documentation's section on SoupStrainers以提高效果。

然后,您可以将所有a代码与您感兴趣的href匹配:

links = soup.find_all('a', href=NEWS_URL_RE)

然后你可以从链接中获取所有文本:

link_texts = [link.get_text() for link in links]