你好,我有一个正则表达式
<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">»</a><span class='extend'>...</span><a href='http://cinemassacre.com/category/avgn/page/12/' class='last'>Last »</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">«</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">»</a><span class='extend'>...</span><a href='http://cinemassacre.com/category/avgn/page/12/' class='last'>Last »</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/