正则表达式中的贪婪模式和非贪婪模式
-
- [一. 贪婪模式(Greedy Mode)](#一. 贪婪模式(Greedy Mode))
- [二. 非贪婪模式(Non-Greedy Mode)](#二. 非贪婪模式(Non-Greedy Mode))
- 三.应用场景区别
这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。
作者:神的孩子都在歌唱
一. 贪婪模式(Greedy Mode)
定义 : 贪婪模式是正则表达式的默认匹配模式。在贪婪模式下,量词会尝试匹配尽可能多的字符。贪婪量词包括 *
、+
、?
、{n,m}
等。
示例:
假设我们有以下字符串:
text
<a>First</a><a>Second</a>
使用贪婪模式的正则表达式 <a>.*</a>
来匹配 <a>
和 </a>
之间的内容:
python
import re
text = "<a>First</a><a>Second</a>"
pattern = re.compile(r"<a>.*</a>")
matches = pattern.findall(text)
print(matches)
输出:
plaintext
['<a>First</a><a>Second</a>']
正则表达式 <a>.*</a>
匹配了整个字符串,因为 .*
尽可能多地匹配字符,直到最后一个 </a>
。
二. 非贪婪模式(Non-Greedy Mode)
定义: 非贪婪模式也称为懒惰模式(Lazy Mode)。在非贪婪模式下,量词会尝试匹配尽可能少的字符。非贪婪量词通过在贪婪量词后面加上一个问号 ?
来表示,例如 *?
、+?
、??
、{n,m}?
等。
示例
使用非贪婪模式的正则表达式 <a>.*?</a>
来匹配 <a>
和 </a>
之间的内容:
python
import re
text = "<a>First</a><a>Second</a>"
pattern = re.compile(r"<a>.*?</a>")
matches = pattern.findall(text)
print(matches)
输出:
plaintext
['<a>First</a>', '<a>Second</a>']
正则表达式 <a>.*?</a>
分别匹配了两个 <a>
标签和它们之间的内容,因为 .*?
尽可能少地匹配字符,直到遇到第一个 </a>
。
三.应用场景区别
- 贪婪模式:适用于需要匹配尽可能多内容的情况。
- 非贪婪模式:适用于需要匹配尽可能少内容的情况,避免过度匹配。
作者:神的孩子都在歌唱
本人博客:https://blog.csdn.net/weixin_46654114
转载说明:务必注明来源,附带本人博客连接。