Maison >développement back-end >Tutoriel Python >Comment puis-je trouver toutes les occurrences d'une sous-chaîne en Python ?

Comment puis-je trouver toutes les occurrences d'une sous-chaîne en Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-12 21:58:10931parcourir

How Can I Find All Occurrences of a Substring in Python?

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!

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