HOWTO · Python
Rechercher un caractère dans une chaîne en Python
Découvrez comment trouver le premier, le dernier ou chaque indice correspondant dans une chaîne Python, et comment gérer une absence.
Sur cette page
En Python, les indices d’une chaîne commencent à 0. Pour trouver un caractère ou une sous-chaîne, utilisez find() pour la première occurrence, rfind() pour la dernière, ou index() si l’absence doit déclencher ValueError. Si aucune correspondance n’existe, find() et rfind() renvoient -1. Pour récupérer tous les indices correspondants, parcourez la chaîne avec enumerate(). Les exemples de code ci-dessous ont été exécutés dans l’environnement Python fourni ; leurs résultats observés sont indiqués dans chaque section.
Ces méthodes recherchent du texte et distinguent les majuscules des minuscules. Chacune accepte la valeur à rechercher ainsi que les bornes facultatives start et end : start est inclus et end est exclu. Par exemple, s.find("n", 6, 13) ne recherche que dans la tranche allant de l’indice 6 à l’indice 12. Le résultat reste un indice compté depuis le début de la chaîne d’origine, et non une position relative à la tranche recherchée.
Utiliser la méthode find() pour trouver la première occurrence et gérer une absence
Appelez find() sur la chaîne en lui passant le caractère ou la sous-chaîne à localiser. La méthode renvoie l’indice de la première occurrence en partant de la gauche. Si la valeur est absente, elle renvoie -1 : vérifiez donc ce résultat avant d’utiliser la valeur comme indice.
Avec s = "python is fun" et c = "n", s.find(c) renvoie 5 : le premier n se trouve à l’indice 5, en comptant à partir de zéro. La forme générale est string.find(substring, start, end) ; omettez les bornes facultatives pour rechercher dans toute la chaîne.
Voici un exemple complet pour trouver la première occurrence :
s = "python is fun"
c = "n"
print(s.find(c))
L’exemple recherche dans s depuis le début. Il affiche 5. Pour une recherche susceptible d’échouer, affectez par exemple le résultat à position avec position = s.find(c), puis testez if position != -1: afin de traiter explicitement l’absence.
Utiliser la méthode rfind() pour trouver la dernière occurrence
Utilisez rfind() lorsque vous cherchez la dernière occurrence d’un caractère ou d’une sous-chaîne. La recherche se fait depuis la droite et la méthode renvoie l’indice correspondant le plus élevé, même si cet indice est toujours compté depuis la gauche. Comme find(), elle accepte les bornes facultatives start et end et renvoie -1 en l’absence de correspondance.
Pour la même chaîne et le même caractère, s.rfind(c) renvoie 12, l’indice du dernier n dans "python is fun". Sa forme générale est string.rfind(substring, start, end).
s = "python is fun"
c = "n"
print(s.rfind(c))
Ici, le résultat est 12. Choisissez find() si la première occurrence vous intéresse et rfind() si c’est la dernière ; aucune de ces méthodes ne déclenche d’erreur simplement parce que la valeur recherchée est absente.
Utiliser la méthode index() lorsque l’absence doit déclencher une erreur
index() renvoie également l’indice de la première occurrence et accepte les mêmes bornes facultatives start et end. Sa différence essentielle avec find() concerne l’absence : si le caractère ou la sous-chaîne n’est pas présent, index() déclenche ValueError au lieu de renvoyer -1. Utilisez cette méthode lorsque l’absence doit être traitée comme une erreur ; préférez find() si vous voulez la détecter à partir de la valeur renvoyée.
Avec s = "python is fun" et c = "n", s.index(c) renvoie 5. La forme générale est string.index(substring, start, end).
s = "python is fun"
c = "n"
print(s.index(c))
Cet exemple recherche le premier n et renvoie donc 5. Ne dites pas que index() renvoie ValueError en cas d’absence : la méthode déclenche cette exception, que l’appelant peut intercepter avec try/except si nécessaire.
Utiliser une boucle for avec enumerate() pour trouver tous les indices correspondants
find(), rfind() et index() ne renvoient chacun qu’un seul indice correspondant. Pour trouver toutes les occurrences, parcourez la chaîne avec enumerate(), qui associe chaque caractère à son indice à partir de zéro. Ajoutez l’indice à une liste chaque fois que le caractère correspond à la valeur recherchée.
s = "python is fun"
c = "n"
lst = []
for pos, char in enumerate(s):
if char == c:
lst.append(pos)
print(lst)
Pour cette chaîne, les indices correspondants sont [5, 12] : les deux lettres n se trouvent aux indices 5 et 12. On peut obtenir le même résultat avec la compréhension de liste [pos for pos, char in enumerate(s) if char == c]. Cette forme regroupe l’itération et la condition de correspondance lorsque le corps d’une boucle distincte n’est pas nécessaire.
Les deux approches parcourent les caractères dans l’ordre et utilisent les mêmes indices à partir de zéro. Choisissez la boucle si vous souhaitez effectuer d’autres opérations pour chaque occurrence ; préférez la compréhension de liste si votre seul objectif est de rassembler les indices correspondants.