Comprendre les expressions régulières en Python

Prinicpes des expressions régulières

Les expressions régulières (regex) sont des modèles décrivant des ensembles de chaînes selon des règles syntaxiques. Utilisées pour rechercher, valider ou manipuler du texte, elles constituent un outil fondamental en informatique.

Concepts clés

  • Matching: Vérification de la conformité d'une chaîne avec un motif
  • Deux méthodes principales en Python: recherche (search) et validation (match)
  • search() localise le motif n'importe où dans la chaîne
  • match() vérifie la correspondance depuis le début de la chaîne

Syntaxe fondamentale

Métacaractères essentiels

Caractère Description Exemple Résultat
. Tout caractère saut de ligne a.c abc
\ Échappement a\.c a.c
* 0 ou plusieurs répétitions abc* ab, abccc
+ 1 ou plusieurs répétitions abc+ abc, abccc
? 0 ou 1 occurrence abc? ab, abc
^ Début de chaîne ^abc abc
$ Fin de chaîne abc$ abc
| Alternative abc|def abc, def
{m,n} Répétitions définies ab{1,2}c abc, abbc
[...] Classe de caractères a[bcd]e abe, ace
(...) Groupe de capture (abc){2} abcabc

Classes prédéfinies

Classe Équivalent Exemple Résultat
\d Chiffre [0-9] a\dc a1c
\D Non-chiffre a\Dc abc
\s Espace blanc a\sc a c
\w Caractère alphanumérique a\wc abc
\b Limite de mot \babc\b abc dans " abc "

Techniques avancées

# Groupes nommés
import re
resultat = re.match(r'(?P<id>\d)abc(?P=id)', '1abc1')
print(resultat.group())  # 1abc1

# Assertions
texte = "Python3"
re.search(r'Python(?=\d)', texte)  # Trouve 'Python' si suivi d'un chiffre

Module re en Python

Fonctions principales

import re

# Compilation
motif = re.compile(r'\d{3}', re.IGNORECASE)

# Recherche
correspondance = re.search(motif, "ID: 123")
print(correspondance.group())  # 123

# Extraction globale
resultats = re.findall(r'\b\w{3}\b', "foo bar baz")
print(resultats)  # ['foo', 'bar', 'baz']

# Remplacement
nouveau_texte = re.sub(r'\s+', '-', "Texte avec espaces")
print(nouveau_texte)  # Texte-avec-espaces

Flags courants

  • re.IGNORECASE: Ignore la casse
  • re.MULTILINE: Mode multiligne
  • re.DOTALL: Inclut les sauts de ligne dans '.'

Exemples pratiques

# Validation d'email
def valider_email(email):
    motif = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
    return bool(re.match(motif, email))

Analyse de logs

# Comptage des IPs dans un fichier log
def compter_ips(fichier):
    compteur = {}
    motif_ip = r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
    with open(fichier) as f:
        for ligne in f:
            ip = re.search(motif_ip, ligne)
            if ip:
                adresse = ip.group()
                compteur[adresse] = compteur.get(adresse, 0) + 1
    return compteur

Bonnes pratiques

  • Utiliser des chaînes brutes (r'...') pour les motifs
  • Précompiler les motifs réutilisés
  • Privilégier les groupes nommés pour la clarté

Étiquettes: expressions-regulieres Python re-module pattern-matching metacaracteres

Publié le 8 juin à 19h51