Rechercher une sous-chaîne avec index() et rindex() en Python

En Python, les méthodes index() et rindex() permettent de rechercher la position d'une sous-chaîne à l'intérieur d'une chaîne de caractères. Elles sont particulièrement utiles lorsqu'on souhaite connaître précisément l'indice auquel commence un caractère, un mot ou une séquence de caractères.

Dans ce tutoriel, nous allons apprendre à utiliser index() et rindex(), à limiter la recherche à une partie de la chaîne et à gérer le cas où la sous-chaîne recherchée n'existe pas.

 

1. À propos de index() et rindex() en Python

Les chaînes de caractères Python disposent de plusieurs méthodes permettant d'effectuer des recherches. Parmi elles, index() et rindex() renvoient l'indice correspondant à la position d'une sous-chaîne.

  • index() recherche la première occurrence d'une sous-chaîne en parcourant la chaîne de gauche à droite.
  • rindex() recherche la dernière occurrence d'une sous-chaîne.

Dans l'exemple suivant, nous recherchons le mot Python dans une chaîne avec la méthode index().

Sortie :

La valeur 10 signifie que le premier caractère du mot Python se trouve à l'indice 10.

 

2. Rechercher une sous-chaîne avec index()

La méthode index() recherche la première occurrence d'une sous-chaîne et retourne l'indice de son premier caractère.

Sa syntaxe générale est la suivante :

Sortie :

Lorsqu'une sous-chaîne apparaît plusieurs fois, index() retourne uniquement la position de sa première occurrence. L'exemple suivant recherche la première occurrence de Python.

Sortie :

Le résultat est 0, car la première occurrence de Python commence au tout premier caractère de la chaîne.

 

3. Rechercher une sous-chaîne avec rindex()

La méthode rindex() permet de rechercher la dernière occurrence d'une sous-chaîne. Le préfixe r signifie ici que la recherche vise l'occurrence située le plus à droite.

Sa syntaxe générale est la suivante :

Sortie :

Dans l'exemple suivant, le mot Python apparaît deux fois. La méthode rindex() permet de récupérer la position de la dernière occurrence.

Sortie :

La dernière occurrence du mot Python commence donc à l'indice 19.

 

4. Différence entre index() et rindex()

La différence essentielle entre index() et rindex() apparaît lorsqu'une sous-chaîne est présente plusieurs fois. index() retourne la première occurrence tandis que rindex() retourne la dernière.

L'exemple suivant applique les deux méthodes à la même chaîne afin de comparer directement leurs résultats.

Sortie :

La première occurrence de chat commence à l'indice 0 tandis que la dernière commence à l'indice 22.

 

5. Utiliser les paramètres start et end

Les méthodes index() et rindex() peuvent recevoir deux paramètres facultatifs, start et end, permettant de limiter la recherche à une portion de la chaîne.

Leur syntaxe complète est la suivante :

Sortie :

Utiliser le paramètre start

Le paramètre start indique l'indice à partir duquel la recherche doit commencer. Dans l'exemple suivant, nous ignorons volontairement la première occurrence de Python.

Sortie :

La recherche commence à l'indice 1. La première occurrence située à l'indice 0 est donc ignorée et index() trouve celle située à l'indice 12.

Utiliser les paramètres start et end

Le paramètre end fixe la limite supérieure de la zone dans laquelle la recherche est effectuée. Comme dans les opérations de découpage Python, cette limite n'est pas incluse.

Sortie :

Python effectue ici la recherche uniquement dans la portion comprise entre les indices 5 et 20.

 

6. Que se passe-t-il si la sous-chaîne n'existe pas ?

Une caractéristique importante de index() et rindex() est qu'elles déclenchent une exception ValueError lorsque la sous-chaîne recherchée n'existe pas.

Dans l'exemple suivant, nous recherchons Java dans une chaîne qui ne contient pas ce mot.

Sortie :

Python ne retourne donc pas une valeur particulière comme -1. Il interrompt normalement l'exécution en déclenchant une exception ValueError si celle-ci n'est pas gérée.

 

7. Gérer l'exception ValueError

Lorsque la présence de la sous-chaîne n'est pas garantie, il est possible d'utiliser try et except afin de gérer l'exception ValueError et d'éviter l'arrêt du programme.

L'exemple suivant tente de rechercher le mot Java. Si celui-ci n'est pas présent, le bloc except affiche un message approprié.

Sortie :

Cette technique est utile lorsque l'utilisation de index() est nécessaire mais que la chaîne recherchée peut être absente.

 

8. Rechercher un caractère dans une chaîne

Les méthodes index() et rindex() ne sont pas limitées aux mots. Elles peuvent également rechercher un seul caractère.

L'exemple suivant recherche la première et la dernière occurrence de la lettre a.

Sortie :

La lettre a apparaît plusieurs fois dans la chaîne. index() localise la première occurrence tandis que rindex() localise la dernière.

 

9. Rechercher un mot dans une phrase

La recherche de sous-chaînes est particulièrement utile pour localiser un mot ou une expression dans une phrase. Il faut cependant garder à l'esprit que les méthodes travaillent sur des suites de caractères et non sur la notion linguistique de mot.

Dans l'exemple suivant, nous recherchons la position du mot Python dans une phrase.

Sortie :

La méthode retourne l'indice du caractère P, c'est-à-dire le premier caractère de la sous-chaîne recherchée.

La recherche est sensible à la casse

Les méthodes index() et rindex() sont sensibles à la casse. Les chaînes Python et python sont donc considérées comme différentes.

L'exemple suivant transforme la chaîne et la valeur recherchée en minuscules avant d'effectuer la recherche afin d'ignorer les différences entre majuscules et minuscules.

Sortie :

L'utilisation de lower() permet ici de rechercher python indépendamment de la casse utilisée dans la chaîne originale.

 

10. Différence entre index(), rindex(), find() et rfind()

Python fournit également les méthodes find() et rfind(). Elles fonctionnent de manière similaire à index() et rindex(), mais leur comportement diffère lorsque la sous-chaîne recherchée est absente.

  • index() : retourne la première occurrence et déclenche ValueError si aucune occurrence n'existe.
  • rindex() : retourne la dernière occurrence et déclenche ValueError si aucune occurrence n'existe.
  • find() : retourne la première occurrence et retourne -1 si aucune occurrence n'existe.
  • rfind() : retourne la dernière occurrence et retourne -1 si aucune occurrence n'existe.

L'exemple suivant permet d'observer directement la différence entre find() et index() lorsqu'une sous-chaîne est absente.

Sortie :

On choisira donc find() lorsque la valeur -1 convient pour signaler l'absence d'une sous-chaîne. index() est particulièrement adaptée lorsqu'on considère l'absence de la sous-chaîne comme une situation exceptionnelle.

 

11. Exemples pratiques

Extraire une partie d'une chaîne à partir d'un séparateur

Une utilisation courante de index() consiste à rechercher la position d'un séparateur puis à utiliser cette position pour effectuer un découpage de la chaîne.

Dans l'exemple suivant, nous localisons le caractère @ d'une adresse électronique afin de séparer le nom d'utilisateur du nom de domaine.

Sortie :

La position obtenue avec index() sert ici directement d'indice pour découper la chaîne.

Récupérer le nom d'un fichier dans un chemin

La méthode rindex() est utile lorsqu'on recherche le dernier séparateur d'une chaîne. L'exemple suivant localise le dernier caractère / afin de récupérer le nom du fichier placé à la fin d'un chemin.

Sortie :

L'utilisation de rindex() permet de sélectionner le dernier séparateur, même si plusieurs caractères / sont présents dans la chaîne.

Extraire le texte situé entre deux caractères

On peut combiner index() et rindex() pour déterminer les limites d'une portion de texte. Dans cet exemple, nous récupérons le contenu placé entre des parenthèses.

Sortie :

index() localise la parenthèse ouvrante et rindex() localise la parenthèse fermante. Ces deux indices servent ensuite à extraire le contenu situé entre les deux caractères.

 

12. À retenir !

  • index() recherche la première occurrence d'une sous-chaîne.
  • rindex() recherche la dernière occurrence d'une sous-chaîne.
  • Les deux méthodes retournent l'indice du premier caractère de l'occurrence trouvée.
  • Les paramètres facultatifs start et end permettent de limiter la zone de recherche.
  • Si la sous-chaîne n'existe pas, index() et rindex() déclenchent une exception ValueError.
  • L'exception ValueError peut être gérée avec try et except.
  • find() et rfind() retournent au contraire -1 lorsque la sous-chaîne n'existe pas.
  • La recherche est sensible à la casse.
  • Les indices obtenus peuvent être utilisés avec le slicing pour extraire certaines parties d'une chaîne.

 




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/


loader-image
Le prix initial était : € 11,00.Le prix actuel est : € 10,00.
Le prix initial était : € 6,00.Le prix actuel est : € 5,00.



Leave a Reply

Your email address will not be published. Required fields are marked *