Python基础之贪婪模式与非贪婪模式
在正则表达式中,常用到的匹配模式是贪婪模式和非贪婪模式。这两种模式的区别在于匹配子串时的“贪心程度”。
贪婪模式
在贪婪模式下,匹配子串时,匹配器会尽可能地匹配更多的字符。具体来说,当你使用“+”、“*”、“?”这样的通配符时,匹配器会尽量多地匹配字符。
举例来说,正则表达式a.+b
与字符串a123b456b789
的匹配结果是a123b456b
,而不是a123b
,因为匹配器尽可能地匹配多个字符。
非贪婪模式
在非贪婪模式下,匹配子串时,匹配器会尽可能少地匹配字符。具体来说,当你在通配符“+”、“*”、“?”后面加上“?”时,匹配器会尽量少地匹配字符。
举例来说,正则表达式a.+?b
与字符串a123b456b789
的匹配结果是a123b
,因为匹配器尽可能少地匹配字符。
贪婪模式和非贪婪模式的应用
示例一:匹配HTML标签中的文本
在HTML页面中,经常需要从标签中提取出文本内容。比如,对于以下HTML代码:
<div class="article">
<h1>Python基础之贪婪模式与非贪婪模式</h1>
<p>在正则表达式中,常用到的匹配模式是贪婪模式和非贪婪模式。</p>
</div>
如果想要提取出<h1>
标签和<p>
标签中的文本,可以使用如下正则表达式:
import re
html = '''<div class="article">
<h1>Python基础之贪婪模式与非贪婪模式</h1>
<p>在正则表达式中,常用到的匹配模式是贪婪模式和非贪婪模式。</p>
</div>'''
pattern = r'<.+?>(.+?)</.+?>'
result = re.findall(pattern, html, re.DOTALL)
print(result) # ['Python基础之贪婪模式与非贪婪模式', '在正则表达式中,常用到的匹配模式是贪婪模式和非贪婪模式。']
运行结果:
['Python基础之贪婪模式与非贪婪模式', '在正则表达式中,常用到的匹配模式是贪婪模式和非贪婪模式。']
在这个示例中,使用了非贪婪模式,通过<.+?>
匹配HTML标签,通过(.+?)
匹配标签中的文本内容。
示例二:匹配字符串中的数字
有时候需要从字符串中提取出数字,这时就可以使用贪婪模式,尽可能地匹配更多的数字字符。
比如,对于字符串abc123def456ghi789
,如果想要提取出其中的数字,可以使用如下正则表达式:
import re
text = 'abc123def456ghi789'
pattern = r'\d+'
result = re.findall(pattern, text)
print(result) # ['123', '456', '789']
运行结果:
['123', '456', '789']
在这个示例中,使用了贪婪模式,通过\d+
匹配字符串中的数字。由于没有加上非贪婪模式的“?”修饰,因此匹配器会尽量多地匹配数字字符。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python基础之贪婪模式与非贪婪模式 - Python技术站