Python Tutorials

Maîtriser les expressions régulières en Python

Spread the love

Maîtriser les expressions régulières en Python

Les expressions régulières (regex ou regexp) sont des outils puissants pour la correspondance de motifs dans les chaînes de caractères. Le module re de Python fournit une interface complète pour les utiliser, permettant une manipulation sophistiquée du texte et l’extraction de données. Ce tutoriel vous guidera à travers les fonctions et les concepts essentiels, vous permettant d’exploiter efficacement la puissance des expressions régulières dans vos projets Python.

Table des matières

  1. re.match() : Correspondance au début
  2. re.search() : Trouver la première correspondance
  3. re.compile() : Optimisation des performances
  4. Indicateurs : Modification du comportement de correspondance
  5. Ensembles de caractères : Définition des caractères autorisés
  6. Recherche et remplacement avec re.sub()
  7. re.findall() : Extraction de toutes les correspondances
  8. re.finditer() : Itération sur les correspondances
  9. re.split() : Fractionnement des chaînes par motif
  10. Motifs de base : Ancres, classes de caractères
  11. Répétition : Quantificateurs et correspondance gourmande/non gourmande
  12. Séquences spéciales : Chiffres, espaces blancs, caractères alphanumériques
  13. re.escape() : Gestion des caractères spéciaux
  14. Groupes de capture et méthode group()

1. re.match() : Correspondance au début

La fonction re.match() tente de faire correspondre le motif uniquement au tout début de la chaîne. Elle renvoie un objet match si elle réussit, sinon None.


import re

text = "Hello World"
pattern = "Hello"
match = re.match(pattern, text)

if match:
    print("Correspondance trouvée :", match.group(0))
else:
    print("Aucune correspondance trouvée")

re.search() analyse toute la chaîne à la recherche de la première occurrence du motif. Contrairement à re.match(), elle n’exige pas que la correspondance se trouve au début.


import re

text = "Hello World"
pattern = "World"
match = re.search(pattern, text)

if match:
    print("Correspondance trouvée :", match.group(0))
else:
    print("Aucune correspondance trouvée")

3. re.compile() : Optimisation des performances

Pour de meilleures performances, en particulier avec l’utilisation répétée du même motif, compilez-le à l’aide de re.compile(). Cela crée un objet motif réutilisable.


import re

compiled_pattern = re.compile(r"d+")  # Compilation du motif
text1 = "Il y a 123 pommes"
text2 = "Et 456 oranges"

match1 = compiled_pattern.search(text1)
match2 = compiled_pattern.search(text2)

print(match1.group(0))  # Sortie : 123
print(match2.group(0))  # Sortie : 456

4. Indicateurs : Modification du comportement de correspondance

Les indicateurs modifient le processus de correspondance. re.IGNORECASE effectue une correspondance insensible à la casse, et re.MULTILINE traite chaque ligne comme une chaîne distincte pour les ancres ^ et $.


import re

text = "Hello world"
pattern = re.compile("hello", re.IGNORECASE)
match = pattern.search(text)
print(match.group(0))  # Sortie : Hello

5. Ensembles de caractères : Définition des caractères autorisés

Les ensembles de caractères ([]) spécifient les caractères autorisés. Par exemple, [a-z] correspond aux lettres minuscules.


import re

text = "abc123XYZ"
pattern = re.compile("[a-z]+")
match = pattern.search(text)
print(match.group(0))  # Sortie : abc

6. Recherche et remplacement avec re.sub()

re.sub() remplace les occurrences d’un motif par une chaîne de remplacement.


import re

text = "Hello World"
new_text = re.sub("World", "Python", text)
print(new_text)  # Sortie : Hello Python

7. re.findall() : Extraction de toutes les correspondances

re.findall() renvoie une liste de toutes les correspondances non chevauchantes.


import re

text = "123 abc 456 def"
numbers = re.findall(r"d+", text)
print(numbers)  # Sortie : ['123', '456']

8. re.finditer() : Itération sur les correspondances

re.finditer() renvoie un itérateur, produisant des objets match. Plus efficace en termes de mémoire pour de nombreuses correspondances dans de longues chaînes.


import re

text = "123 abc 456 def"
for match in re.finditer(r"d+", text):
    print(match.group(0))  # Sortie : 123, 456 (sur des lignes séparées)

9. re.split() : Fractionnement des chaînes par motif

re.split() fractionne une chaîne en fonction d’un motif.


import re

text = "pomme,banane,cerise"
fruits = re.split(r",", text)
print(fruits)  # Sortie : ['pomme', 'banane', 'cerise']

10. Motifs de base : Ancres, classes de caractères

  • . : Correspond à n’importe quel caractère sauf le saut de ligne.
  • ^ : Correspond au début de la chaîne.
  • $ : Correspond à la fin de la chaîne.
  • [] : Correspond à un ensemble de caractères (par exemple, [abc], [a-z]).
  • [^...] : Correspond à n’importe quel caractère *non* présent dans l’ensemble (ensemble de caractères nié).

11. Répétition : Quantificateurs et correspondance gourmande/non gourmande

  • * : Zéro occurrence ou plus.
  • + : Une occurrence ou plus.
  • ? : Zéro occurrence ou une occurrence.
  • {m} : Exactement m occurrences.
  • {m,n} : De m à n occurrences.
  • *?, +?, ??, {m,n}? : Versions non gourmandes (correspond à la chaîne la plus courte possible).

12. Séquences spéciales : Chiffres, espaces blancs, caractères alphanumériques

  • d : Correspond à n’importe quel chiffre (0-9).
  • D : Correspond à n’importe quel caractère non numérique.
  • s : Correspond à n’importe quel caractère d’espace blanc (espace, tabulation, saut de ligne).
  • S : Correspond à n’importe quel caractère non espace blanc.
  • w : Correspond à n’importe quel caractère alphanumérique (lettres, chiffres, trait de soulignement).
  • W : Correspond à n’importe quel caractère non alphanumérique.

13. re.escape() : Gestion des caractères spéciaux

re.escape() échappe les caractères spéciaux dans une chaîne, vous permettant de l’utiliser comme motif littéral sans interprétations regex inattendues.

14. Groupes de capture et méthode group()

Les parenthèses () créent des groupes de capture. La méthode group() accède aux sous-chaînes capturées.


import re

text = "Mon numéro de téléphone est 123-456-7890"
match = re.search(r"(d{3})-(d{3})-(d{4})", text)
if match:
    indicatif = match.group(1)
    prefixe = match.group(2)
    numéro = match.group(3)
    print(f"Indicatif : {indicatif}, Préfixe : {prefixe}, Numéro : {numéro}")

Ce tutoriel fournit une base solide sur le module re de Python. Une exploration plus approfondie des techniques avancées améliorera considérablement vos capacités de traitement de chaînes de caractères. N’oubliez pas de consulter la documentation officielle de Python pour une référence complète.

Laisser un commentaire

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