Rechercher la n-ième occurrence d'une sous-chaîne dans une chaîne
Identifier l'index correspondant à la n-ième occurrence d'une sous-chaîne est une tâche qui se pose souvent dans divers scénarios de programmation. En Python, il n’existe aucune fonction intégrée spécialement conçue à cet effet. Cependant, plusieurs approches peuvent être utilisées pour obtenir ce résultat.
Une approche simple consiste à utiliser une boucle pour parcourir la chaîne et compter les occurrences de la sous-chaîne. L'index de départ est initialisé au résultat de la première occurrence et la boucle continue jusqu'à ce que la n-ième occurrence soit trouvée.
def find_nth_occurrence(haystack, needle, n):
index = haystack.find(needle)
while index >= 0 and n > 1:
index = haystack.find(needle, index len(needle))
n -= 1
return index
Cette méthode est efficace et facile à comprendre, mais elle nécessite plusieurs passages dans la chaîne, ce qui peut prendre du temps pour les grandes chaînes.
Une autre approche plus pythonique consiste à utiliser des chaînes régulières. expressions. Les expressions régulières offrent un moyen puissant et concis de rechercher et de manipuler des chaînes. La fonction suivante utilise la méthode re.findall() pour rechercher toutes les occurrences de la sous-chaîne, puis récupère le n-ème index :
import re
def find_nth_occurrence_regex(haystack, needle, n):
occurrences = re.findall(needle, haystack)
if len(occurrences) >= n:
return haystack.index(occurrences[n - 1])
else:
return -1
Cette méthode est plus rapide que l'approche itérative pour les grandes chaînes, mais elle nécessite l'importation d'un module supplémentaire (re). De plus, elle peut être moins lisible que l'approche itérative pour certains utilisateurs.
Le choix entre les approches itérative et d'expression régulière dépend en fin de compte des exigences spécifiques de la tâche à accomplir. Pour les petites chaînes, l'approche itérative peut être suffisante, tandis que pour les grandes chaînes, l'approche par expression régulière peut offrir de meilleures performances.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3