贪婪方式: 默认
尽量匹配更多的满足条件的字符。正则表达式默认为贪婪匹配
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。
贪婪和非贪婪的转化方式就是加一个问号。