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
Barbara Streisandoriginal
2024-12-06 07:54:11932parcourir

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']

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!

Déclaration:
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