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.
1234567891011121314import 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.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
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.
1234567891011121314import 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.
Merci pour vos commentaires !