Skip to main content
 首页 » 编程设计

Python 正则表达式 : Difference between (. +) 和 (.+)

2025年05月04日22qlqwjy

我是正则表达式和 Python 的 urllib 的新手。我浏览了一个关于网络抓取的在线教程,它有以下代码。在研究了正则表达式之后,我觉得我可以在我的正则表达式中使用 (.+) 而不是 (.+?),但是我错了。我最终打印了比我想要的更多的 html 代码。我以为我掌握了正则表达式的窍门,但现在我很困惑。请向我解释这两个表达式之间的区别以及为什么它会占用这么多 html。谢谢!

附言。这是星巴克股票报价抓取工具。

import urllib 
import re 
 
url = urllib.urlopen("http://finance.yahoo.com/q?s=SBUX") 
htmltext = url.read() 
regex = re.compile('<span id="yfs_l84_sbux">(.+?)</span>') 
found = re.findall(regex, htmltext) 

找到打印

请您参考如下方法:

.+是贪婪的——它匹配直到不能再匹配,并且只返回需要的部分。

.+?不是——它一有机会就停止。

例子:

假设您有这个 HTML:

<span id="yfs_l84_sbux">foo bar</span><span id="yfs_l84_sbux2">foo bar</span> 

这个正则表达式匹配整个事情:

<span id="yfs_l84_sbux">(.+)<\/span> 

它一直走到尽头,然后“回馈”一个</span> ,但正则表达式的其余部分匹配最后一个 </span> , 所以完整的正则表达式匹配整个 HTML block 。

但是这个正则表达式在第一个 </span> 处停止:

<span id="yfs_l84_sbux">(.+?)<\/span>