首先需要明确一点,正则默认就是贪婪模式,何为贪婪模式? 就是在满足条件的前提下,尽可能多的进行匹配。
下面先来个例子
s ='my tel number is 132-4567-1258' r = re.match(r'(.+)(d+-d+-d+)',s) print(r.groups()) # ('my tel number is 13', '2-4567-1258') ''' 结查分析: .+ : 表示任意字符匹配一次或者多次 d+-d+-d+ : 1个数字或者多个数字,然后横线 , 然后1个数字或者多个数字,然后横线 ,然后1个数字或者多个数字 因为正则是贪婪的,所以在满意第2个分组的前提下(给你1个数字吧), .+ 会尽可能多的匹配字符串, 所以就出现了('my tel number is 13', '2-4567-1258')这个结果。 ''' """ 关闭贪婪 """ s ='my tel number is 132-4567-1258' r = re.match(r'(.+?)(d+-d+-d+)',s) print(r.groups()) # ('my tel number is ', '132-4567-1258') ''' 注意:? 只是关闭了.+的贪婪模式, 尽可能少的匹配, d+-d+-d+ 还是贪婪的 '''
In [20]: re.match(r'aa(d+)bb','aa1234bb').group(1) Out[20]: '1234' In [21]: re.match(r'aa(d+?)bb','aa1234bb').group(1) Out[21]: '1234' In [22]: re.match(r'aa(d+?)','aa1234bb').group(1) Out[22]: '1'