Maison > développement back-end > Tutoriel Python > Comment puis-je trouver des correspondances qui se chevauchent à l'aide de « re.findall() » de Python ?

Comment puis-je trouver des correspondances qui se chevauchent à l'aide de « re.findall() » de Python ?

Mary-Kate Olsen
Libérer: 2024-12-06 16:40:13
original
634 Les gens l'ont consulté

How Can I Find Overlapping Matches Using Python's `re.findall()`?

Comprendre les correspondances qui se chevauchent dans Regex

Par défaut, la méthode findall() du module re de Python ne capture pas les correspondances qui se chevauchent dans une chaîne . Ce comportement peut prêter à confusion, en particulier lorsque les correspondances sont constituées de caractères consécutifs.

Considérez le code suivant :

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

Sortie :

['he', 'll']
Copier après la connexion

Ce modèle correspond à deux caractères consécutifs. caractères de mot (w). Comme prévu, lui et nous reviendrons. Cependant, el et lo ne sont pas capturés, bien qu'ils apparaissent dans la chaîne.

Surmonter les correspondances qui se chevauchent

Pour capturer les correspondances qui se chevauchent, nous pouvons utiliser une assertion anticipée (?= ...). Cette assertion correspond à un modèle spécifique mais ne consomme aucun caractère de la chaîne. Au lieu de cela, il vérifie si les caractères suivants correspondent à l'assertion.

Par exemple :

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

Sortie :

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

Dans ce cas, (?=(ww )) correspond à n'importe quel emplacement où existent deux caractères de mots consécutifs sans les consommer réellement. Cela permet à findall() de renvoyer à la fois des correspondances qui se chevauchent et qui ne se chevauchent pas.

Explication

L'expression régulière /(?=(ww)) peut être décomposée comme suit :

  • (?:...) est un groupe non capturant, ce qui signifie que le contenu du groupe n'est pas renvoyé.
  • ww correspond à deux caractères de mot consécutifs.
  • (?=...) est l'assertion d'anticipation, qui garantit que la chaîne contient ww à l'emplacement actuel mais ne les consomme pas.

En utilisant cette approche, nous pouvons détecter efficacement toutes les correspondances qui se chevauchent au sein d'une chaîne, même lorsqu'elles sont constituées de caractères consécutifs.

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