Maison > développement back-end > Tutoriel Python > Pourquoi « re.findall » ne renvoie-t-il pas les correspondances Regex qui se chevauchent et comment les assertions anticipées peuvent-elles résoudre ce problème ?

Pourquoi « re.findall » ne renvoie-t-il pas les correspondances Regex qui se chevauchent et comment les assertions anticipées peuvent-elles résoudre ce problème ?

Barbara Streisand
Libérer: 2024-12-06 07:54:11
original
909 Les gens l'ont consulté

Why Doesn't `re.findall` Return Overlapping Regex Matches, and How Can Lookahead Assertions Solve This?

Découverte des correspondances Regex qui se chevauchent : plongez-vous dans les assertions anticipées

Problème :
Lors de l'utilisation de re.findall pour faire correspondre un modèle d'expression régulière, pourquoi ne récupère-t-il pas toutes les correspondances qui se chevauchent ? Par exemple, dans la chaîne "hello", pourquoi l'expression régulière r'ww' correspond-elle uniquement à "he" et "ll" mais pas à "el" et "lo" ?

Réponse :
Par défaut, re.findall ne génère pas de correspondances qui se chevauchent. Pour y parvenir, utilisez une assertion d'anticipation, une puissante fonctionnalité d'expression régulière.

Solution :

# Using a lookahead assertion
matches = re.findall(r'(?=(\w\w))', 'hello')

# Output: ['he', 'el', 'll', 'lo']
Copier après la connexion

La construction (?=...) dans l'expression régulière est une assertion prospective. Il correspond si le modèle spécifié apparaît immédiatement après la position actuelle, mais il ne consomme aucun caractère de la chaîne. Dans ce cas, il identifie toutes les séquences de deux caractères ("ww") dans "hello" sans consommer aucun caractère.

Explication :

  • La parenthèse L'expression (ww) définit le modèle à deux caractères à correspondre.
  • (?=) précède le modèle, indiquant un assertion d'anticipation.
  • L'expression régulière引擎 déplace le curseur le long de "hello" et vérifie en permanence si les deux caractères suivants correspondent au modèle "ww."
  • Si c'est le cas, elle enregistre la position actuelle comme une correspondance.
  • Ce processus se poursuit, aboutissant à la détection de toutes les correspondances qui se chevauchent : "il", "el", "ll" et "Lo."

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!

source:php.cn
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