Recherche de toutes les occurrences d'une sous-chaîne en Python
En Python, vous pouvez utiliser string.find() et string.rfind() méthodes pour récupérer l’index d’une sous-chaîne dans une chaîne plus grande. Cependant, il n'existe pas de fonction intégrée spécialement conçue pour renvoyer toutes les occurrences d'une sous-chaîne.
Utilisation d'expressions régulières
Une approche plus puissante pour rechercher plusieurs sous-chaînes occurrences consiste à utiliser des expressions régulières :
import re # Sample string string = "test test test test" # Find all occurrences of "test" matches = [m.start() for m in re.finditer('test', string)] print(matches) # Output: [0, 5, 10, 15]
re.finditer génère un générateur qui génère des objets de correspondance individuels. Chaque objet de correspondance fournit l'index de départ d'une sous-chaîne correspondante.
Considération des correspondances qui se chevauchent
Par défaut, re.finditer recherche les correspondances qui ne se chevauchent pas. Pour trouver des correspondances qui se chevauchent, utilisez une anticipation positive :
matches = [m.start() for m in re.finditer('(?=tt)', 'ttt')] print(matches) # Output: [0, 1]
L'expression (?=tt) affirme que la sous-chaîne "tt" apparaît à la position actuelle mais ne la consomme pas.
Recherche inversée sans chevauchement
Pour effectuer une recherche inversée sans chevauchement de correspondances, combinez le positif et le négatif lookahead :
search = 'tt' matches = [m.start() for m in re.finditer('(?=%s)(?!.{1,%d}%s)' % (search, len(search)-1, search), 'ttt')] print(matches) # Output: [1]
Cette expression garantit que "tt" apparaît immédiatement après le curseur mais pas dans une certaine plage d'analyse (len(search)-1) dans le sens inverse.
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!