Dans les expressions régulières, la correspondance gourmande fait référence à la correspondance avec autant de caractères que possible, tandis que la correspondance non gourmande (également appelée correspondance paresseuse ou correspondance minimale) correspond au moins de caractères possible.
Les expressions régulières sont gourmandes par défaut et correspondront à autant de caractères que possible répondant aux conditions. Par exemple, considérons l'exemple suivant :
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())
sortir:
my name is John. Nice to meet you, John
Dans cet exemple, l'expression régulière my.*John
correspond à n'importe quel caractère après « mon » (y compris les espaces, les signes de ponctuation, etc.) jusqu'au dernier « John ».
Si nous voulons faire correspondre la plus petite chaîne après "my", c'est-à-dire arrêter la correspondance lorsque nous rencontrons le premier "John", nous pouvons utiliser des symboles de correspondance non gourmands et remplacer par , ?
comme .*
suit.*?
:
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())
sortir:
my name is John
Cette fois, l'expression régulière my.*?John
utilise une correspondance non gourmande, qui correspond uniquement à la plus petite chaîne « je m'appelle John » avant le premier « John » qui remplit la condition. En utilisant une correspondance non gourmande, nous pouvons contrôler l'expression régulière pour qu'elle corresponde au moins de caractères possible, ce qui donne des résultats plus précis.