正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。举例如下,匹配出数字后面的0:
>>> re.match(r'^(\d+)(0*)$', '102300').groups()
('102300', '')
\d+ 贪地尽可能多的匹配,所以后面的0*没得匹配,只能匹配空字符了
必须让\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配:
>>> re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023', '00')
\d+? 能让后面的匹配就让后面的匹配,尽可能少匹配,懒,能少匹配就少匹配。