简述python re模块正则的贪婪方式与非贪婪方式

贪婪方式: 默认

尽量匹配更多的满足条件的字符。正则表达式默认为贪婪匹配

st = "abc123abc"
st = re.sub("([0-9]+)","hello",st)
print(st)

+代表匹配满足前面的正则字符,即在0-9之间的数字。原字符中有三个数字,这里默认匹配越多越好,所以就全部匹配了。只形成一个hello,sub函数是把正则匹配到的字符串替换成后面的字符串。

st = "abc123123abc"
st = re.sub("([0-9]{1,3})","hello",st)
print(st)

{1,3}匹配符合前面条件的1个至3个字符,这里是贪婪方式,所以会匹配三个数字。只形成两个hello。

非贪婪方式:加?

尽量匹配最少的满足条件的字符。在写好的正则表达式后面加一个问号?

st = "abc123abc"
st = re.sub("([0-9]+?)","hello",st)
print(st)

可以看到,因为是最小匹配,所以数字1被匹配了一次,2被匹配了一次,3被匹配了一次,一共三次,替换了三个hello

st = "abc123123abc"
st = re.sub("([0-9]{1,3}?)","hello",st)
print(st)

{1,3}匹配符合前面条件的1个至3个字符,这里是非贪婪方式,所以每次只会匹配最少的数字,那就是一个。六个数字会被替换六次形成六个hello。

贪婪和非贪婪的转化方式就是加一个问号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值