Aller au contenu
BackPythonTips

La magie des fonctions dans re.sub()

Exploitez tout le potentiel de re.sub() en Python : découvrez ses fonctionnalités avancées pour des substitutions évoluées.

Photo by Brett Jordan / Unsplash

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.

re — Opérations à base d’expressions rationnelles
Code source : Lib/re/ Ce module fournit des opérations sur les expressions rationnelles similaires à celles que l’on trouve dans Perl. Les motifs, comme les chaînes, à analyser peuvent aussi bien ê…

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 ?

Au-delà du “with”: les gestionnaires de contexte
Plongeons dans les gestionnaires de contexte en Python. L’instruction with n’aura plus de secret pour vous !

Dernier