Les expressions régulières (regex) sont des outils puissants pour la recherche et la manipulation de motifs dans les chaînes de caractères. En Python, le module re
fournit différentes fonctions pour travailler avec les regex, y compris la fonction re.sub()
. Cette dernière est utilisée pour substituer les occurrences d'un motif dans une chaîne de caractères par une valeur de remplacement spécifiée.
La signature de la fonction re.sub()
est la suivante :
re.sub(motif, remplacement, chaîne[, count, flags])
Ici, motif
représente le motif d'expression régulière à rechercher et chaîne
est la chaîne de caractères en entrée, et remplacement
peut être une chaîne de caractères. La fonction accepte aussi deux arguments optionnels count
et flags
.
Bien que la plupart des développeurs soient familiers avec l'utilisation de re.sub()
avec une chaîne de caractères comme remplacement
, on peut donner en paramètre une fonction. Cette fonctionnalité puissante permet des substitutions dynamiques et complexes basées sur le motif
correspondant.
Prenons un exemple pour illustrer la puissance de l'utilisation d'une fonction. Considérons le scénario suivant : vous avez une chaîne de caractères qui contient différentes dates au format "AAAA-MM-JJ", et vous souhaitez remplacer chaque date par le jour de la semaine correspondant.
import re
from datetime import datetime
def remplacer_date(match):
date_str = match.group()
date_obj = datetime.strptime(date_str, '%Y-%m-%d')
jour_semaine = date_obj.strftime('%A')
return jour_semaine
texte = "Aujourd'hui c'est 2023-05-17. Demain ce sera 2023-05-18."
resultat = re.sub(r'\d{4}-\d{2}-\d{2}', remplacer_date, texte)
print(resultat)
Dans cet exemple, nous définissons une fonction appelée remplacer_date()
qui prend un objet de correspondance en argument. L'objet de correspondance contient des informations sur le motif correspondant, y compris la chaîne de date. Pour voir le détail de l'objet match
, on peut changer le corps de la fonction comme ceci :
def remplacer_date(match):
print(match)
print(match.group())
# <re.Match object; span=(18, 28), match='2023-05-17'>
# 2023-05-17
Ensuite, nous utilisons la fonction datetime.strptime()
pour convertir la chaîne de date en un objet de date et nous retournons le jour de la semaine avec l'aide de la fonction strftime()
.
Lorsque nous appelons re.sub()
avec la fonction remplacer_date
comme argument de remplacement, celle-ci est appliquée à chaque correspondance dans la chaîne de caractères en entrée. Ainsi, 2023-05-17
et 2023-05-18
sont remplacées par le jour de la semaine correspondant. La chaîne de caractères résultante sera donc :
print(resultat)
# "Aujourd'hui c'est mardi. Demain ce sera mercredi."
Comme vous pouvez le constater, l'utilisation d'une fonction au lieu d'une chaîne de caractères comme remplacement élargit les possibilités de manipulation de texte avec les expressions régulières en Python.
La prochaine fois que vous aurez besoin d'effectuer des substitutions complexes ou dynamiques, n'oubliez pas la puissance de re.sub()
.
Pour découvrir davantage, voici le lien vers la documentation officielle du module re
.
Python regorge d'autres mécanismes tout aussi impressionnants. Par exemple, saviez vous comment le mot-clé with
fonctionne en coulisse et comment créer vos propres gestionnaires de contexte ?