- À propos de find() et rfind() en Python
- Rechercher une sous-chaîne avec find()
- Comprendre la valeur -1 retournée par find()
- Rechercher depuis la droite avec rfind()
- Limiter la recherche avec les paramètres start et end
- Rechercher une sous-chaîne sans tenir compte de la casse
- Extraire du texte à partir d'une position trouvée
- Rechercher plusieurs occurrences d'une sous-chaîne
- Comparer find(), rfind() et l'opérateur in
- Différence entre find() et index()
- Exemples pratiques avec find() et rfind()
- Erreurs et précautions à connaître
- À retenir !
1. À propos de find() et rfind() en Python
Python propose les méthodes find() et rfind() pour rechercher une sous-chaîne à l'intérieur d'une chaîne de caractères. Ces méthodes renvoient la position, c'est-à-dire l'indice, où commence la sous-chaîne recherchée.
La méthode find() recherche la première occurrence de la sous-chaîne en parcourant la chaîne de gauche à droite. La méthode rfind() recherche la dernière occurrence.
Dans l'exemple suivant, le mot "Python" commence à l'indice 10.
1 2 3 | texte = "Apprendre Python" position = texte.find("Python") print(position) |
Sortie :
1 | 10 |
Comme les indices Python commencent à 0, le premier caractère d'une chaîne possède l'indice 0, le deuxième l'indice 1, et ainsi de suite.
2. Rechercher une sous-chaîne avec find()
La méthode find() recherche la première occurrence d'une sous-chaîne et renvoie l'indice de son premier caractère.
Dans cet exemple, "Python" apparaît une seule fois et commence à l'indice 3.
1 2 3 | texte = "Le Python est facile" position = texte.find("Python") print(position) |
Sortie :
1 | 3 |
Si la sous-chaîne apparaît plusieurs fois, find() renvoie uniquement la position de sa première occurrence.
1 2 3 | texte = "Python Java Python" position = texte.find("Python") print(position) |
Sortie :
1 |
find() peut rechercher un seul caractère de la même manière qu'une sous-chaîne contenant plusieurs caractères.
1 2 3 | texte = "Programmation" position = texte.find("g") print(position) |
Sortie :
1 | 3 |
3. Comprendre la valeur -1 retournée par find()
Lorsque la sous-chaîne recherchée n'existe pas, find() ne provoque pas d'erreur. Elle renvoie la valeur -1.
Dans l'exemple suivant, "Java" n'apparaît pas dans la chaîne.
1 2 3 | texte = "Apprendre Python" position = texte.find("Java") print(position) |
Sortie :
1 | -1 |
Cette propriété permet d'utiliser find() dans une condition pour déterminer si une sous-chaîne a été trouvée.
1 2 3 4 5 6 | texte = "Apprendre Python" position = texte.find("Python") if position != -1: print("Sous-chaîne trouvée à l'indice", position) else: print("Sous-chaîne introuvable") |
Sortie :
1 | Sous-chaîne trouvée à l'indice 10 |
Il faut éviter de tester directement le résultat avec une condition comme if texte.find("Python"), car l'indice 0 correspond à une occurrence valide mais la valeur 0 est considérée comme fausse dans un contexte booléen.
Le programme suivant illustre ce cas particulier.
1 2 3 4 | texte = "Python est facile" position = texte.find("Python") print(position) print(position != -1) |
Sortie :
1 2 | 0 True |
4. Rechercher depuis la droite avec rfind()
La méthode rfind() recherche la dernière occurrence d'une sous-chaîne. Elle renvoie l'indice où commence cette dernière occurrence.
Dans l'exemple suivant, "Python" apparaît deux fois. rfind() renvoie la position de la deuxième occurrence.
1 2 3 | texte = "Python Java Python" position = texte.rfind("Python") print(position) |
Sortie :
1 | 12 |
La différence entre find() et rfind() apparaît clairement lorsqu'une sous-chaîne possède plusieurs occurrences.
1 2 3 | texte = "Python Java Python" print("find() :", texte.find("Python")) print("rfind() :", texte.rfind("Python")) |
Sortie :
1 2 | find() : 0 rfind() : 12 |
Comme find(), rfind() renvoie -1 lorsque la sous-chaîne recherchée n'existe pas.
1 2 3 | texte = "Python Java Python" position = texte.rfind("PHP") print(position) |
Sortie :
1 | -1 |
5. Limiter la recherche avec les paramètres start et end
Les méthodes find() et rfind() acceptent des paramètres facultatifs permettant de limiter la recherche à une partie de la chaîne. Le paramètre start indique l'indice à partir duquel la recherche commence.
Dans l'exemple suivant, la recherche commence à l'indice 1. La première occurrence située à l'indice 0 est donc ignorée.
1 2 3 | texte = "Python Java Python" position = texte.find("Python", 1) print(position) |
Sortie :
1 | 12 |
Il est également possible d'indiquer un indice de fin avec un troisième argument. Comme pour le slicing, l'indice end délimite la recherche et n'est pas inclus dans la zone recherchée.
1 2 3 | texte = "Python Java Python" position = texte.find("Java", 0, 11) print(position) |
Sortie :
1 | 7 |
Si la sous-chaîne ne peut pas être entièrement trouvée dans la zone définie, find() renvoie -1.
1 2 3 | texte = "Python Java Python" position = texte.find("Python", 1, 12) print(position) |
Sortie :
1 | -1 |
Les mêmes paramètres peuvent être utilisés avec rfind(). La méthode recherche alors la dernière occurrence située dans la zone définie.
1 2 3 | texte = "Python Java Python Java" position = texte.rfind("Java", 0, 20) print(position) |
Sortie :
1 | 7 |
6. Rechercher une sous-chaîne sans tenir compte de la casse
Les méthodes find() et rfind() sont sensibles à la casse. Les chaînes "Python", "python" et "PYTHON" sont donc différentes lors d'une recherche.
Dans l'exemple suivant, la recherche échoue car la casse des deux chaînes est différente.
1 2 3 | texte = "Apprendre Python" position = texte.find("python") print(position) |
Sortie :
1 | -1 |
Pour effectuer une recherche simple sans tenir compte de la casse, on peut convertir temporairement le texte et la sous-chaîne avec lower() ou, pour une comparaison Unicode plus robuste, avec casefold().
1 2 3 4 | texte = "Apprendre Python" recherche = "PYTHON" position = texte.casefold().find(recherche.casefold()) print(position) |
Sortie :
1 | 10 |
7. Extraire du texte à partir d'une position trouvée
La position renvoyée par find() peut être utilisée avec le slicing afin d'extraire une partie de la chaîne à partir de la sous-chaîne trouvée.
Dans l'exemple suivant, find() détermine la position de "Python", puis le slicing extrait le texte à partir de cette position.
1 2 3 4 | texte = "Cours de Python pour débutants" position = texte.find("Python") resultat = texte[position:] print(resultat) |
Sortie :
1 | Python pour débutants |
Il est préférable de vérifier que find() n'a pas renvoyé -1 avant d'utiliser sa valeur comme indice de slicing.
1 2 3 4 5 6 | texte = "Cours de Python pour débutants" position = texte.find("Python") if position != -1: print(texte[position:]) else: print("Sous-chaîne introuvable") |
Sortie :
1 | Python pour débutants |
Il est également possible d'extraire uniquement la partie située avant la sous-chaîne recherchée.
1 2 3 4 | texte = "Cours de Python" position = texte.find("Python") if position != -1: print(texte[:position]) |
Sortie :
1 | Cours de |
8. Rechercher plusieurs occurrences d'une sous-chaîne
find() renvoie une seule occurrence à chaque appel. Pour rechercher toutes les occurrences, on peut répéter la recherche dans une boucle en déplaçant progressivement l'indice de départ.
Dans l'exemple suivant, on recherche toutes les occurrences du mot "Python" et on affiche leurs positions.
1 2 3 4 5 6 | texte = "Python Java Python PHP Python" recherche = "Python" position = texte.find(recherche) while position != -1: print(position) position = texte.find(recherche, position + len(recherche)) |
Sortie :
1 2 3 | 0 12 23 |
Si l'on souhaite également détecter des occurrences qui se chevauchent, il faut avancer d'un seul caractère après chaque résultat plutôt que de la longueur de la sous-chaîne.
Dans cet exemple, "ana" apparaît deux fois dans "banana", aux indices 1 et 3.
1 2 3 4 5 6 | texte = "banana" recherche = "ana" position = texte.find(recherche) while position != -1: print(position) position = texte.find(recherche, position + 1) |
Sortie :
1 2 | 1 3 |
9. Comparer find(), rfind() et l'opérateur in
Lorsque l'on souhaite uniquement savoir si une sous-chaîne existe, l'opérateur in est généralement plus simple et plus lisible que find().
Le programme suivant vérifie la présence de "Python" sans chercher sa position.
1 2 | texte = "Apprendre Python" print("Python" in texte) |
Sortie :
1 | True |
find() est préférable lorsque l'on souhaite connaître la position de la première occurrence, tandis que rfind() permet d'obtenir la position de la dernière occurrence.
1 2 3 4 | texte = "Python Java Python" print("Présent :", "Python" in texte) print("Première position :", texte.find("Python")) print("Dernière position :", texte.rfind("Python")) |
Sortie :
1 2 3 | Présent : True Première position : 0 Dernière position : 12 |
10. Différence entre find() et index()
Les méthodes find() et index() permettent toutes les deux de rechercher la position d'une sous-chaîne. Leur principale différence apparaît lorsque la sous-chaîne n'existe pas.
find() renvoie -1 lorsque la recherche échoue.
1 2 | texte = "Apprendre Python" print(texte.find("Java")) |
Sortie :
1 | -1 |
index(), en revanche, déclenche une exception ValueError si la sous-chaîne est absente. Le programme suivant intercepte cette exception afin d'afficher proprement le résultat.
1 2 3 4 5 6 | texte = "Apprendre Python" try: position = texte.index("Java") print(position) except ValueError: print("Sous-chaîne introuvable") |
Sortie :
1 | Sous-chaîne introuvable |
Python propose également rindex(), qui correspond à rfind() mais déclenche ValueError lorsqu'aucune occurrence n'est trouvée.
11. Exemples pratiques avec find() et rfind()
Trouver la position d'un caractère dans une adresse e-mail
find() peut servir à rechercher la position du caractère @ dans une adresse e-mail afin de séparer simplement le nom d'utilisateur et le domaine.
1 2 3 4 5 6 7 | email = "yassine@example.com" position = email.find("@") if position != -1: utilisateur = email[:position] domaine = email[position + 1:] print("Utilisateur :", utilisateur) print("Domaine :", domaine) |
Sortie :
1 2 | Utilisateur : yassine Domaine : example.com |
Trouver le dernier point d'un nom de fichier
rfind() est utile pour rechercher le dernier séparateur d'une chaîne. Dans un nom de fichier simple, le dernier point peut servir à repérer l'extension.
1 2 3 4 | fichier = "archive.2026.zip" position = fichier.rfind(".") if position != -1: print("Extension :", fichier[position + 1:]) |
Sortie :
1 | Extension : zip |
Extraire le nom après le dernier séparateur
rfind() peut également être utilisée pour rechercher la dernière occurrence d'un séparateur dans une chaîne représentant un chemin simple.
1 2 3 4 | chemin = "documents/python/cours.txt" position = chemin.rfind("/") if position != -1: print(chemin[position + 1:]) |
Sortie :
1 | cours.txt |
Rechercher un mot dans une phrase
find() peut être utilisée pour afficher la position d'un mot demandé lorsque celui-ci existe dans une phrase.
1 2 3 4 5 6 7 | phrase = "Python est un langage facile" mot = "langage" position = phrase.find(mot) if position != -1: print("Le mot commence à l'indice", position) else: print("Mot introuvable") |
Sortie :
1 | Le mot commence à l'indice 14 |
12. Erreurs et précautions à connaître
find() est sensible à la casse
Une différence entre majuscules et minuscules suffit pour que la recherche échoue. Il faut donc normaliser la casse lorsque l'application doit effectuer une recherche insensible à la casse.
1 2 3 | texte = "Python" print(texte.find("python")) print(texte.find("Python")) |
Sortie :
1 2 | -1 0 |
Ne pas confondre -1 et l'indice 0
L'indice 0 signifie que la sous-chaîne a été trouvée dès le début de la chaîne. La valeur -1 signifie qu'elle n'a pas été trouvée.
1 2 3 | texte = "Python" print("Python :", texte.find("Python")) print("Java :", texte.find("Java")) |
Sortie :
1 2 | Python : 0 Java : -1 |
Vérifier le résultat avant de l'utiliser comme indice
Utiliser directement -1 dans un slicing peut produire un résultat valide mais incorrect par rapport à l'intention du programme. Il est donc recommandé de vérifier le résultat de find() ou rfind() avant de l'exploiter.
1 2 3 4 5 6 | texte = "Apprendre Python" position = texte.find("Java") if position != -1: print(texte[position:]) else: print("Impossible d'extraire la sous-chaîne") |
Sortie :
1 | Impossible d'extraire la sous-chaîne |
13. À retenir !
Les méthodes find() et rfind() permettent de rechercher la position d'une sous-chaîne dans une chaîne de caractères Python.
- find() renvoie l'indice de la première occurrence trouvée.
- rfind() renvoie l'indice de la dernière occurrence trouvée.
- Les indices commencent à 0.
- Si la sous-chaîne est absente, find() et rfind() renvoient -1.
- Une occurrence trouvée au début de la chaîne possède l'indice 0, qu'il ne faut pas confondre avec un échec de recherche.
- find() et rfind() sont sensibles à la casse.
- Les paramètres facultatifs start et end permettent de limiter la zone de recherche.
- L'opérateur in est généralement préférable lorsque l'on souhaite uniquement tester la présence d'une sous-chaîne.
- index() et rindex() déclenchent ValueError lorsque la recherche échoue, contrairement à find() et rfind().
- La position obtenue peut être combinée avec le slicing pour extraire une partie de la chaîne.
Le programme suivant résume la différence essentielle entre find() et rfind() lorsque la sous-chaîne apparaît plusieurs fois.
1 2 3 4 | texte = "Python Java Python PHP Python" print("Première occurrence :", texte.find("Python")) print("Dernière occurrence :", texte.rfind("Python")) print("Absent :", texte.find("JavaScript")) |
Sortie :
1 2 3 | Première occurrence : 0 Dernière occurrence : 23 Absent : -1 |
Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/



