Python正则表达式,匹配太多

标签 python html regex

你好,我有一个正则表达式
<a href="(.+?)" class="nextpostslink">

此正则表达式在以下 html 上运行良好
'> <span class='pages'>Page 1 of 12</span><span class='current'>1</span><a href='http://cinemassacre.com/category/avgn/page/2/' class='page larger'>2</a><a href='http://cinemassacre.com/category/avgn/page/3/' class='page larger'>3</a><a href='http://cinemassacre.com/category/avgn/page/4/' class='page larger'>4</a><a href='http://cinemassacre.com/category/avgn/page/5/' class='page larger'>5</a><a href="http://cinemassacre.com/category/avgn/page/2/" class="nextpostslink">&raquo;</a><span class='extend'>...</span><a href='http://cinemassacre.com/category/avgn/page/12/' class='last'>Last &raquo;</a> </div> </div>

我要提取的部分是来自
的下一页网址 <a href="http://cinemassacre.com/category/avgn/page/2/" class="nextpostslink">

但是当我在这个 HTML block 上运行这个正则表达式时
'> <span class='pages'>Page 2 of 12</span><a href="http://cinemassacre.com/category/avgn/" class="previouspostslink">&laquo;</a><a href='http://cinemassacre.com/category/avgn/' class='page smaller'>1</a><span class='current'>2</span><a href='http://cinemassacre.com/category/avgn/page/3/' class='page larger'>3</a><a href='http://cinemassacre.com/category/avgn/page/4/' class='page larger'>4</a><a href='http://cinemassacre.com/category/avgn/page/5/' class='page larger'>5</a><a href="http://cinemassacre.com/category/avgn/page/3/" class="nextpostslink">&raquo;</a><span class='extend'>...</span><a href='http://cinemassacre.com/category/avgn/page/12/' class='last'>Last &raquo;</a> </div><br/> </div>


它从第一个 <a href=" 中提取所有内容至 " class="nextpostslink">
为什么会这样?我认为 (.+?) 是非贪婪的,所以它应该提取最少的数量。
应该是<a href="http://cinemassacre.com/category/avgn/page/3/" class="nextpostslink">

我使用的完整 python 代码是
match=re.compile('<a href="(.+?)" class="nextpostslink">', re.DOTALL).findall(pagenav)

最佳答案

据我了解,贪婪从正则表达式的开头开始工作——即,它找到 <a href=" ,然后非贪婪让它停在第一个 " class="nextpostslink">而不是最后一个,就像贪婪的版本那样。

你最好使用 BeautifulSoup这里:

from bs4 import BeautifulSoup as BS
soup = BS(html)
print soup.find("a", "nextpostslink").attrs['href']
# returns u'http://cinemassacre.com/category/avgn/page/2/'

关于Python正则表达式,匹配太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13710639/

相关文章:

python - 从字符串中提取数值并保存到数据框时出现问题

python - 名称错误 : name 'ReleaseDeal' is not defined in Django

html - 图片和图片描述在同一行(Css Html)

JavaScript 正则表达式 - 尝试匹配 ( 5', 78' , 8 0')(90' +2') 中的所有数字,前面不带 +

javascript - 从 Word 插入文本时替换 html 标签

python - 如何绘制渐变色线?

python - 装饰一个构造函数有参数的类

html - 居中宽度未知的div

css - 如何在网页源代码中添加链接?

python正则表达式,多行匹配,但仍想获取行号