在正则表达式中,贪婪匹配是指匹配尽可能多的字符,而非贪婪匹配(也称为懒惰匹配或最小匹配)则是匹配尽可能少的字符。
正则表达式默认是贪婪匹配的,它会尽可能多地匹配满足条件的字符。例如,考虑以下示例:
import re
text = "Hello, my name is John. Nice to meet you, John."
pattern = r'my.*John'  # 贪婪匹配
match = re.search(pattern, text)
print(match.group())
输出:
my name is John. Nice to meet you, John
    在这个例子中,正则表达式
    
     my.*John
    
    匹配了 “my” 后面的任意字符(包括空格、标点符号等),直到最后一个 “John”。
   
    如果我们想要匹配 “my” 后面的最小字符串,即遇到第一个 “John” 就停止匹配,我们可以使用非贪婪匹配的符号
    
     ?
    
    ,将
    
     .*
    
    改为
    
     .*?
    
    ,如下所示:
   
import re
text = "Hello, my name is John. Nice to meet you, John."
pattern = r'my.*?John'  # 非贪婪匹配
match = re.search(pattern, text)
print(match.group())
输出:
my name is John
    这次,正则表达式
    
     my.*?John
    
    使用了非贪婪匹配,它只匹配到第一个满足条件的 “John” 前面的最小字符串 “my name is John”。通过使用非贪婪匹配,我们可以控制正则表达式尽可能少地匹配字符,从而得到更精确的结果。
   
 
版权声明:本文为m0_66238629原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
