Maison >développement back-end >Tutoriel Python >Comment puis-je trouver toutes les occurrences d'une sous-chaîne dans une chaîne Python ?
Recherche de toutes les occurrences d'une sous-chaîne
Python fournit des capacités étendues de manipulation de chaînes, notamment les fonctions string.find() et string.rfind( ) qui récupèrent respectivement la première occurrence d’une sous-chaîne depuis le début et la fin. Cependant, ces fonctions ne suffisent pas lorsque l'on cherche à trouver toutes les occurrences d'une sous-chaîne.
Solution : exploiter les expressions régulières
En l'absence d'une "chaîne" intégrée .find_all()", nous pouvons exploiter la puissance des expressions régulières :
import re text = "test test test test" # Find all occurrences of "test" matches = [m.start() for m in re.finditer('test', text)] # Print the found indexes print(matches) # [0, 5, 10, 15]
Cette solution itère sur le résultat de re.finditer('test', text), un générateur qui génère des objets correspondants pour chaque occurrence découverte. En extrayant la propriété start() de chaque correspondance, nous obtenons une liste d'index représentant la position de la sous-chaîne dans la chaîne d'origine.
Gestion des correspondances qui se chevauchent
Si Les correspondances qui se chevauchent sont autorisées, elles peuvent être capturées en utilisant des assertions anticipées dans l'expression régulière :
matches = [m.start() for m in re.finditer('(?=tt)', 'ttt')] # [0, 1]
Effectuer Recherches inversées
Pour effectuer une recherche inversée sans chevauchements, une combinaison d'anticipations positives et négatives peut être utilisée :
search = 'tt' matches = [m.start() for m in re.finditer('(?=%s)(?!.{1,%d}%s)' % (search, len(search)-1, search), 'ttt')] # [1]
En utilisant des expressions régulières, nous pouvons identifier efficacement et récupérez toutes les occurrences d'une sous-chaîne dans une chaîne Python.
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!