Remplacer les occurrences d’une sous-chaîne dans une chaîne par Python

Online Coding Courses for Kids

introduction

Remplacement tout ou n les occurrences d’une sous-chaîne dans une chaîne donnée sont un problème assez courant de manipulation de chaînes et de traitement de texte en général. Heureusement, la plupart de ces tâches sont facilitées en Python grâce à son vaste éventail de fonctions intégrées, y compris celle-ci.

Disons que nous avons une chaîne qui contient la phrase suivante:

The brown-eyed man drives a brown car.

Notre objectif est de remplacer le mot "brown" avec le mot "blue":

The blue-eyed man drives a blue car.

Dans cet article, nous utiliserons le replace() fonction ainsi que le sub() et subn() fonctions avec des modèles pour remplacer toutes les occurrences d’une sous-chaîne d’une chaîne.

remplacer()

Le moyen le plus simple de le faire est d’utiliser la fonction intégrée – replace() :

string.replace(oldStr, newStr, count)

Les deux premiers paramètres sont obligatoires, tandis que le troisième est facultatif. oldStr est la sous-chaîne que nous voulons remplacer par newStr. Il est à noter que la fonction retourne une nouvelle chaîne, avec la transformation effectuée, sans affecter l’original.

Essayons:

string_a = "The brown-eyed man drives a brown car."
string_b = string_a.replace("brown", "blue")
print(string_a)
print(string_b)

Nous avons effectué l’opération sur string_a, a emballé le résultat dans string_b et les a imprimés tous les deux.

Ce code entraîne:

The brown-eyed man drives a brown car.
The blue-eyed man drives a blue car.

Encore une fois, la chaîne en mémoire qui string_a pointe vers reste inchangé. Les chaînes en Python sont immuables, ce qui signifie simplement que vous ne pouvez pas modifier une chaîne. Cependant, vous pouvez réaffecter la variable de référence à une nouvelle valeur.

Pour apparemment effectuer cette opération en place, nous pouvons simplement réaffecter string_a à lui-même après l’opération:

string_a = string_a.replace("brown", "blue")
print(string_a)

Ici, la nouvelle chaîne générée par le replace() la méthode est affectée au string_a variable.

Remplacer n Occurrences d’une sous-chaîne

Maintenant, et si nous ne voulons pas changer tout occurrences d’une sous-chaîne? Et si nous voulons remplacer le premier n?

C’est là que le troisième paramètre de la replace() La fonction entre en jeu. Elle représente le nombre de sous-chaînes qui vont être remplacées. Le code suivant remplace uniquement la première occurrence du mot "brown" avec le mot "blue":

string_a = "The brown-eyed man drives a brown car."
string_a = string_a.replace("brown", "blue", 1)
print(string_a)

Et ceci imprime:

The blue-eyed man drives a brown car.

Par défaut, le troisième paramètre est défini pour modifier toutes les occurrences.

Occurrences de sous-chaîne avec des expressions régulières

Pour aggraver encore le problème, disons que nous voulons non seulement remplacer toutes les occurrences d’une certaine sous-chaîne, mais remplacer toutes les sous-chaînes qui correspondent à un certain modèle. Même cela peut être fait avec une seule ligne, en utilisant des expressions régulières et la bibliothèque standard re module.

Les expressions régulières sont un sujet complexe avec un large éventail d’utilisations en informatique, nous n’allons donc pas trop approfondir cet article, mais si vous avez besoin d’un démarrage rapide, vous pouvez consulter notre guide sur les expressions régulières en Python.

Dans son essence, une expression régulière définit un modèle. Par exemple, disons que nous avons un texte sur les personnes qui possèdent des chats et des chiens, et que nous voulons changer les deux termes avec le mot "pet". Tout d’abord, nous devons définir un modèle qui correspond aux deux termes tels que – (cat|dog).

En utilisant le sous() Fonction

Une fois le modèle réglé, nous allons utiliser le re.sub() fonction qui a la syntaxe suivante:

re.sub(pattern, repl, string, count, flags)

Le premier argument est le modèle que nous recherchons (une chaîne ou un Pattern objet), repl est ce que nous allons insérer (peut être une chaîne ou une fonction; si c’est une chaîne, toute barre oblique inverse s’échappe dans celle-ci est traitée) string est la chaîne dans laquelle nous recherchons.

Les arguments facultatifs sont count et flags qui indiquent le nombre d’occurrences à remplacer et les indicateurs utilisés pour traiter l’expression régulière, respectivement.

Si le modèle ne correspond à aucune sous-chaîne, la chaîne d’origine sera renvoyée inchangée:

import re
string_a = re.sub(r'(cat|dog)', 'pet', "Mark owns a dog and Mary owns a cat.")
print(string_a)

Ce code imprime:

Mark owns a pet and Mary owns a pet.

Correspondance de modèles insensible à la casse

Pour effectuer une correspondance de modèle insensible à la casse, par exemple, nous allons définir le paramètre d’indicateur sur re.IGNORECASE:

import re
string_a = re.sub(r'(cats|dogs)', "Pets", "DoGs are a man's best friend", flags=re.IGNORECASE)
print(string_a)

Maintenant, toute combinaison de cas de "dogs" sera également inclus. Lors de la correspondance du motif avec plusieurs chaînes, pour éviter de le copier à plusieurs endroits, nous pouvons définir un Pattern objet. Ils ont également un sub() fonction avec la syntaxe:

Pattern.sub(repl, string, count)

En utilisant Modèle Objets

Définissons un Pattern pour les chats et les chiens et vérifiez quelques phrases:

import re
pattern = re.compile(r'(Cats|Dogs)')
string_a = pattern.sub("Pets", "Dogs are a man's best friend.")
string_b = pattern.sub("Animals", "Cats enjoy sleeping.")
print(string_a)
print(string_b)

Ce qui nous donne le résultat:

Pets are a man's best friend.
Animals enjoy sleeping.

le subn () Fonction

Il y a aussi un subn() méthode avec la syntaxe:

re.subn(pattern, repl, string, count, flags)

le subn() La fonction retourne un tuple avec la chaîne et le nombre de correspondances dans la chaîne que nous avons recherchée:

import re
string_a = re.subn(r'(cats|dogs)', 'Pets', "DoGs are a mans best friend", flags=re.IGNORECASE)
print(string_a)

Le tuple ressemble à:

('Pets are a mans best friend', 1)

UNE Pattern objet contient un objet similaire subn() fonction:

Pattern.subn(repl, string, count)

Et il est utilisé de manière très similaire:

import re
pattern = re.compile(r'(Cats|Dogs)')
string_a = pattern.subn("Pets", "Dogs are a man's best friend.")
string_b = pattern.subn("Animals", "Cats enjoy sleeping.")
print(string_a)
print(string_b)

Cela se traduit par:

("Pets are a man's best friend.", 1)
('Animals enjoy sleeping.', 1)

Conclusion

Python offre des fonctions simples et faciles pour la gestion des chaînes. Le moyen le plus simple de remplacer toutes les occurrences d’une sous-chaîne donnée dans une chaîne est d’utiliser le replace() fonction.

Si nécessaire, la bibliothèque standard re Le module fournit un ensemble d’outils plus diversifié qui peut être utilisé pour des problèmes de niche tels que la recherche de modèles et les recherches insensibles à la casse.


Close Menu