Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Anticipation, rétrospection et correspondance non-gourmande | Expressions Régulières Avancées et Applications
Expressions Régulières Python

Anticipation, rétrospection et correspondance non-gourmande

Glissez pour afficher le menu

Comprendre les fonctionnalités avancées des expressions régulières telles que lookahead (anticipation), lookbehind (rétro-anticipation) et les quantificateurs non gloutons permet d’effectuer des correspondances de motifs très précises en Python. Lookahead et lookbehind sont des types d’assertions de largeur nulle, qui permettent de vérifier si un motif existe (ou non) avant ou après la position actuelle dans le texte, sans inclure ce motif dans la correspondance elle-même. Les quantificateurs non gloutons permettent de contrôler la quantité de texte consommée par un motif, garantissant ainsi de ne capturer que le strict nécessaire.

  • Lookahead s’écrit (?=...) et vérifie si un certain motif suit la position actuelle ;
  • Lookbehind, écrit (?<=...), vérifie si un certain motif précède la position actuelle ;
  • Les quantificateurs non gloutons comme *? et +? modifient le comportement glouton par défaut des quantificateurs ;
  • Par défaut, les quantificateurs comme * et + capturent autant de texte que possible ; en ajoutant un ?, ils deviennent non gloutons et capturent le moins de texte possible.

Exemple de lookahead : \w+(?=\d) correspond à un mot uniquement s’il est immédiatement suivi d’un chiffre, mais le chiffre ne fait pas partie de la correspondance. Le lookbehind fonctionne de manière similaire mais dans la direction opposée.

1234567891011121314
import re # Lookahead: Match words followed by a digit text = "apple1 banana2 cherry pie" pattern_lookahead = r"\w+(?=\d)" matches_lookahead = re.findall(pattern_lookahead, text) print("Lookahead matches:", matches_lookahead) # Non-greedy matching: Extract text between tags html = "<b>Bold</b> and <b>Strong</b>" pattern_nongreedy = r"<b>(.*?)</b>" matches_nongreedy = re.findall(pattern_nongreedy, html) print("Non-greedy matches:", matches_nongreedy)

Influence du lookahead et des quantificateurs non gloutons sur la correspondance de motifs

Le motif lookahead \w+(?=\d) dans l’exemple correspond à toute séquence de caractères alphanumériques (\w+) uniquement si elle est directement suivie d’un chiffre (\d). Le résultat obtenu n’inclut pas le chiffre, car le lookahead ne consomme pas les caractères qu’il vérifie. Ceci est utile pour trouver des mots qui répondent à une condition sur ce qui suit, sans inclure cette partie dans la correspondance.

Le quantificateur non glouton *? dans <b>(.*?)</b> modifie la quantité de texte capturée entre les balises <b> et </b>. Un quantificateur glouton comme .* capturerait autant que possible, potentiellement tout ce qui se trouve entre la première balise <b> et la dernière </b>. En utilisant *?, le motif capture le moins de texte possible, c’est-à-dire uniquement le contenu de chaque paire de balises individuellement. Cela évite la sur-capture et garantit l’extraction de la plus petite sous-chaîne correspondante.

Le lookahead et les quantificateurs non gloutons offrent un contrôle puissant sur la manière dont vos expressions régulières sélectionnent le texte :

  • Lookahead permet de vérifier qu’une correspondance est suivie d’un motif spécifique sans l’inclure ;
  • Les quantificateurs non gloutons aident à éviter de capturer plus de texte que nécessaire.
question mark

Que fait le quantificateur non gourmand *? ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 1

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Anticipation, rétrospection et correspondance non-gourmande

Comprendre les fonctionnalités avancées des expressions régulières telles que lookahead (anticipation), lookbehind (rétro-anticipation) et les quantificateurs non gloutons permet d’effectuer des correspondances de motifs très précises en Python. Lookahead et lookbehind sont des types d’assertions de largeur nulle, qui permettent de vérifier si un motif existe (ou non) avant ou après la position actuelle dans le texte, sans inclure ce motif dans la correspondance elle-même. Les quantificateurs non gloutons permettent de contrôler la quantité de texte consommée par un motif, garantissant ainsi de ne capturer que le strict nécessaire.

  • Lookahead s’écrit (?=...) et vérifie si un certain motif suit la position actuelle ;
  • Lookbehind, écrit (?<=...), vérifie si un certain motif précède la position actuelle ;
  • Les quantificateurs non gloutons comme *? et +? modifient le comportement glouton par défaut des quantificateurs ;
  • Par défaut, les quantificateurs comme * et + capturent autant de texte que possible ; en ajoutant un ?, ils deviennent non gloutons et capturent le moins de texte possible.

Exemple de lookahead : \w+(?=\d) correspond à un mot uniquement s’il est immédiatement suivi d’un chiffre, mais le chiffre ne fait pas partie de la correspondance. Le lookbehind fonctionne de manière similaire mais dans la direction opposée.

1234567891011121314
import re # Lookahead: Match words followed by a digit text = "apple1 banana2 cherry pie" pattern_lookahead = r"\w+(?=\d)" matches_lookahead = re.findall(pattern_lookahead, text) print("Lookahead matches:", matches_lookahead) # Non-greedy matching: Extract text between tags html = "<b>Bold</b> and <b>Strong</b>" pattern_nongreedy = r"<b>(.*?)</b>" matches_nongreedy = re.findall(pattern_nongreedy, html) print("Non-greedy matches:", matches_nongreedy)

Influence du lookahead et des quantificateurs non gloutons sur la correspondance de motifs

Le motif lookahead \w+(?=\d) dans l’exemple correspond à toute séquence de caractères alphanumériques (\w+) uniquement si elle est directement suivie d’un chiffre (\d). Le résultat obtenu n’inclut pas le chiffre, car le lookahead ne consomme pas les caractères qu’il vérifie. Ceci est utile pour trouver des mots qui répondent à une condition sur ce qui suit, sans inclure cette partie dans la correspondance.

Le quantificateur non glouton *? dans <b>(.*?)</b> modifie la quantité de texte capturée entre les balises <b> et </b>. Un quantificateur glouton comme .* capturerait autant que possible, potentiellement tout ce qui se trouve entre la première balise <b> et la dernière </b>. En utilisant *?, le motif capture le moins de texte possible, c’est-à-dire uniquement le contenu de chaque paire de balises individuellement. Cela évite la sur-capture et garantit l’extraction de la plus petite sous-chaîne correspondante.

Le lookahead et les quantificateurs non gloutons offrent un contrôle puissant sur la manière dont vos expressions régulières sélectionnent le texte :

  • Lookahead permet de vérifier qu’une correspondance est suivie d’un motif spécifique sans l’inclure ;
  • Les quantificateurs non gloutons aident à éviter de capturer plus de texte que nécessaire.
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 1
some-alt