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
re.match()
: Correspondance au débutre.search()
: Trouver la première correspondancere.compile()
: Optimisation des performances- Indicateurs : Modification du comportement de correspondance
- Ensembles de caractères : Définition des caractères autorisés
- Recherche et remplacement avec
re.sub()
re.findall()
: Extraction de toutes les correspondancesre.finditer()
: Itération sur les correspondancesre.split()
: Fractionnement des chaînes par motif- Motifs de base : Ancres, classes de caractères
- Répétition : Quantificateurs et correspondance gourmande/non gourmande
- Séquences spéciales : Chiffres, espaces blancs, caractères alphanumériques
re.escape()
: Gestion des caractères spéciaux- 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")
2. re.search()
: Trouver la première correspondance
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}
: Exactementm
occurrences.{m,n}
: Dem
à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.