最简单的方式描述贪婪和非贪婪

本文介绍了正则表达式中贪婪与非贪婪模式。贪婪模式在表达式匹配成功时尽可能多匹配,非贪婪模式则尽可能少匹配。可在”*”,”?”,”+”,”{m,n}”后加“?”使贪婪变非贪婪,还给出示例代码,同时指出前后均有限定条件时非匹配模式可能失效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继续上次的有一个忘了说了

split 根据匹配进行切割字符串,并返回一个列表

import re
citing=re.split(r":| ","info:zhangsa 33 zhejiang")
print(citing)
输出:['gerenjianli', 'zhangsa', '33', 'zhejiang']

贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配.

而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。
在”*”,”?”,”+”,”{m,n}”后面加上?,使贪婪变成非贪婪。

import re
s="my telephone 1230-83356881"
r=re.match(".+?(\d+-\d+)",s).group(1)
print(r)
    1230-83356881
import re
s="my telephone 1230-83356881"
r=re.match(".+(\d+-\d+)",s).group(1)
print(r)
0-83356881

正则表达式模式中使用到通配字,那它在从左到右的顺序求值时,会尽量“抓取”满足匹配最长字符串,在我们上面的例子里面,“.+”会从字符串的启始处抓取满足模式的最长字符,其中包括我们想得到的第一个整型字段的中的大部分,“\d+”只需一位字符就可以匹配,所以它匹配了数字“4”,而“.+”则匹配了从字符串起始到这个第一位数字4之前的所有字符。

解决方式:非贪婪操作符“?”,这个操作符可以用在”*”,”+”的后面,要求正则匹配的越少越好。

import re
a=re.match(r’aa(\d+?)’,’aa123456bb’).group(1)
print(a)
输出:1

import re
a=re.match(r’aa(\d+)’,’aa123456bb’).group(1)
print(a)
输出:123456

import re

a=re.match(r’aa(\d+)bb’,’aa123456bb’).group(1)
print(a) #如果前后均有限定条件,则非匹配模式失效

import re
a=re.match(r’aa(\d+?)bb’,’aa123456bb’).group(1)
print(a) #如果前后均有限定条件,则非匹配模式失效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值