Comment gérer les chaînes de caractères avec le module re (expressions régulières)

Introduction

Les expressions régulières sont un outil puissant pour rechercher, filtrer, et manipuler des chaînes de caractères en Python. Le module re permet d'exploiter ces motifs pour effectuer des tâches complexes comme la validation d'emails, l'extraction d'informations spécifiques, ou le remplacement de parties de texte. Maîtriser les expressions régulières vous permet de traiter les chaînes de caractères de manière efficace et flexible.

Dans cet article, nous allons explorer les fonctionnalités de base du module re, y compris la recherche, le filtrage, la validation, et le remplacement de texte en utilisant les expressions régulières.


1. Importation et bases du module re

Pour commencer à travailler avec les expressions régulières, vous devez importer le module re :

import re

Le module re fournit plusieurs fonctions pour travailler avec des motifs de texte, telles que search(), match(), findall(), et sub().


2. Syntaxe des expressions régulières de base

Voici quelques symboles de base utilisés pour écrire des expressions régulières :

  • . : Correspond à n'importe quel caractère.
  • ^ : Indique le début d'une chaîne.
  • $ : Indique la fin d'une chaîne.
  • * : Correspond à zéro ou plusieurs répétitions du caractère précédent.
  • + : Correspond à une ou plusieurs répétitions du caractère précédent.
  • ? : Correspond à zéro ou une répétition du caractère précédent.
  • [] : Définit une classe de caractères (ex : [a-z] pour toutes les lettres minuscules).
  • | : Opérateur OU (ex : a|b correspond à "a" ou "b").

3. Recherche de motifs avec search()

La fonction re.search() recherche un motif dans une chaîne. Elle renvoie le premier objet Match trouvé ou None si aucun motif ne correspond.

Exemple : Rechercher un mot dans une chaîne

import re

texte = "Bonjour, comment allez-vous ?"
motif = r"comment"
match = re.search(motif, texte)

if match:
    print("Mot trouvé :", match.group())  # Affiche "Mot trouvé : comment"
else:
    print("Mot non trouvé")

Ici, search() trouve le mot "comment" dans le texte et renvoie l'objet Match.


4. Vérifier le début d'une chaîne avec match()

La fonction re.match() vérifie uniquement si le début de la chaîne correspond au motif. Elle renvoie un objet Match si une correspondance est trouvée au début de la chaîne, ou None sinon.

Exemple : Vérifier un format au début de la chaîne

import re

texte = "Python est génial"
motif = r"Python"
if re.match(motif, texte):
    print("Le texte commence par 'Python'")
else:
    print("Le texte ne commence pas par 'Python'")

5. Extraire toutes les correspondances avec findall()

La fonction re.findall() renvoie une liste de toutes les occurrences du motif dans la chaîne, ce qui est utile pour extraire plusieurs éléments.

Exemple : Extraire tous les mots d'une chaîne

import re

texte = "Python est simple, Python est puissant"
motif = r"Python"
mots = re.findall(motif, texte)
print(mots)  # Affiche ['Python', 'Python']

6. Remplacer du texte avec sub()

La fonction re.sub() remplace toutes les occurrences d'un motif dans une chaîne par un texte donné.

Exemple : Remplacer toutes les occurrences d'un mot

import re

texte = "Python est cool, vraiment cool"
motif = r"cool"
nouveau_texte = re.sub(motif, "génial", texte)
print(nouveau_texte)  # Affiche "Python est génial, vraiment génial"

7. Utiliser des groupes dans les expressions régulières

Les groupes, définis par des parenthèses (), permettent de capturer des parties spécifiques d’une correspondance. Ces groupes peuvent ensuite être récupérés pour une utilisation ultérieure.

Exemple : Extraire un numéro de téléphone

import re

texte = "Contactez-nous au 06-12345678."
motif = r"(\d{2})-(\d{8})"
match = re.search(motif, texte)

if match:
print("Préfixe :", match.group(1)) # Affiche "06"
print("Numéro :", match.group(2)) # Affiche "12345678"

Dans cet exemple, \d{2} correspond à deux chiffres et \d{8} à huit chiffres. Les parenthèses permettent de capturer ces parties pour les afficher séparément.


8. Utiliser des quantificateurs pour les répétitions

Les quantificateurs permettent de définir le nombre de répétitions souhaitées d'un motif :

  • {n} : Exactement n répétitions.
  • {n,} : Au moins n répétitions.
  • {,m} : Au plus m répétitions.
  • {n,m} : Entre n et m répétitions.

Exemple : Valider une adresse email

import re

email = "exemple@test.com"
motif = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"

if re.match(motif, email):
    print("Adresse email valide")
else:
    print("Adresse email non valide")

Ce motif vérifie la structure de l'adresse email, où :

  • [a-zA-Z0-9._%+-]+ : correspond au nom d’utilisateur (lettres, chiffres et symboles autorisés).
  • @[a-zA-Z0-9.-]+ : correspond au domaine.
  • \.[a-zA-Z]{2,} : correspond à l'extension, qui doit avoir au moins 2 lettres.

9. Utiliser des drapeaux avec re

Les drapeaux permettent de modifier le comportement des expressions régulières :

  • re.IGNORECASE ou re.I : Ignore la casse.
  • re.MULTILINE ou re.M : Considère chaque ligne d’une chaîne multilignes comme une nouvelle chaîne.
  • re.DOTALL ou re.S : Permet à . de correspondre aux retours à la ligne.

Exemple : Recherche insensible à la casse

import re

texte = "Bonjour, BONJOUR, bonjour"
motif = r"bonjour"
resultats = re.findall(motif, texte, re.IGNORECASE)
print(resultats)  # Affiche ['Bonjour', 'BONJOUR', 'bonjour']

10. Les expressions régulières avancées avec re.compile()

Vous pouvez compiler une expression régulière en utilisant re.compile() pour la réutiliser plusieurs fois dans le code, ce qui améliore les performances.

Exemple : Compilation d’une expression régulière

import re

motif = re.compile(r"\d{4}-\d{2}-\d{2}")
texte = "La date est 2024-11-07."

if motif.search(texte):
    print("Date trouvée :", motif.search(texte).group())  # Affiche "Date trouvée : 2024-11-07"

Conclusion

Le module re en Python est un outil essentiel pour manipuler les chaînes de caractères à l’aide d’expressions régulières. Que ce soit pour la validation, la recherche, ou le remplacement, re simplifie les tâches de manipulation de texte et vous permet de traiter des motifs complexes de manière élégante et concise. En maîtrisant ces techniques, vous pouvez gérer efficacement des tâches de filtrage et de nettoyage de données dans vos projets Python.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *