⊗pyPmREGL 38 of 129 menu

Limitation de la gourmandise dans les regex en Python

Les expressions régulières sont par défaut gourmandes. Cela signifie qu'elles capturent le nombre maximum possible de caractères. Analysons cela avec un exemple. Supposons que nous ayons la chaîne suivante :

txt = 'aeeex zzz x kkk'

Dans cette chaîne, nous voulons trouver la sous-chaîne 'aeeex' selon le modèle suivant : lettre 'a', puis n'importe quel caractère une ou plusieurs fois, puis la lettre 'x' :

res = re.sub('a.+x', '!', txt) print(res)

Bien que nous devrions obtenir la chaîne '! zzz x kkk', la chaîne '! kkk' sera affichée. La raison est que notre regex recherche tous les caractères de la lettre 'a' à la lettre 'x'. Mais dans notre chaîne, il y a deux lettres 'x' ! À cause de la gourmandise, il se trouve que la regex cherche jusqu'au dernier x, capturant ainsi ce dont nous n'avions pas besoin.

Bien sûr, souvent, ce comportement est exactement ce dont nous avons besoin. Mais dans ce cas précis, il faut désactiver la gourmandise et dire à la regex de chercher jusqu'au premier x. Dans ce cas, vous devez placer un point d'interrogation après l'opérateur de répétition :

res = re.sub('a.+?x', '!', txt) print(res) # affichera la chaîne '! zzz x kkk'

La gourmandise peut être limitée pour tous les opérateurs de répétition : et *, et ?, et {} - comme ceci : *?, ?? et {}?.

Soit la chaîne :

txt = 'aba accca azzza wwwwa'

Écrivez une regex qui trouvera toutes les chaînes encadrées par les lettres 'a', et remplacera chacune d'elles par '!'. Entre les lettres 'a', il peut y avoir n'importe quel caractère (sauf 'a').

Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser