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é