Maison > développement back-end > Tutoriel Python > Pourquoi « re.findall() » ne renvoie-t-il pas les correspondances Regex qui se chevauchent et comment puis-je y remédier ?

Pourquoi « re.findall() » ne renvoie-t-il pas les correspondances Regex qui se chevauchent et comment puis-je y remédier ?

Patricia Arquette
Libérer: 2024-12-06 10:23:12
original
455 Les gens l'ont consulté

Why Doesn't `re.findall()` Return Overlapping Regex Matches, and How Can I Fix It?

Approfondir les correspondances Regex qui se chevauchent

Dans le monde des expressions régulières, comprendre pourquoi certaines correspondances peuvent ne pas être trouvées peut être déroutant. Prenons l'exemple suivant :

match = re.findall(r'\w\w', 'hello')
print(match)
Copier après la connexion

Comme prévu, cet extrait renvoie une liste contenant « il » et « ll », qui correspondent au modèle de séquences de deux lettres. Cependant, on pourrait se demander pourquoi 'el' et 'lo', qui semblent également correspondre au modèle, ne sont pas inclus dans le résultat.

Ce comportement découle du comportement par défaut de la fonction re.findall, qui ne produit pas de correspondances qui se chevauchent. En d'autres termes, il se déplace le long de la chaîne, ne trouvant que la première correspondance pour un modèle donné et ne prenant en compte aucun chevauchement potentiel.

Pour résoudre ce problème, il existe une solution de contournement intelligente impliquant des assertions anticipées. Une assertion anticipée (?=...) correspond à un modèle sans réellement consommer aucune partie de la chaîne. Cela nous permet de trouver toutes les correspondances qui se chevauchent et qui satisfont au modèle donné.

Par exemple, pour trouver toutes les séquences de deux lettres dans la chaîne « bonjour » à l'aide d'une assertion anticipée, l'expression suivante peut être utilisée :

re.findall(r'(?=(\w\w))', 'hello')
Copier après la connexion

Cette expression renverra une liste contenant ['he', 'el', 'll', 'lo'], car chaque séquence de deux lettres est mise en correspondance avec succès sans chevauchement.

Comprendre les assertions anticipées et leurs applications pratiques peut grandement améliorer l'efficacité des expressions régulières pour des scénarios de correspondance complexes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal