Maîtriser les Expressions Régulières Python : re.match(), re.search(), re.findall() — Exemples Pratiques
Qu'est-ce qu'une Expression Régulière en Python ?
Une expression régulière (regex) est une description textuelle compacte qui indique à Python comment localiser des motifs dans une chaîne. Les regex sont indispensables pour l'extraction de données, la validation et la transformation à travers les bases de code, logs, fichiers de configuration et projets de web scraping.
En Python, le module re est fourni avec l'interpréteur et expose une API riche pour compiler des motifs, rechercher et remplacer du texte. Que vous filtriez des entrées utilisateur, parsiez des logs ou scrapiez du contenu web, une solide maîtrise des bases des regex fait gagner du temps et réduit les bugs.
Concepts de Base des Regex
- Caractères littéraux — correspondent au texte exact que vous écrivez.
- Métacaractères — symboles spéciaux décrivant classes, plages ou quantificateurs (ex:
\d,\w,+,?,*). - Ancres —
^et$ancrent le motif au début ou à la fin d'une chaîne. - Quantificateurs — spécifient combien de fois un token peut se répéter.
- Groupes et alternation — capturent des sous-correspondances et permettent plusieurs options.
- Drapeaux (flags) — modifient le comportement du motif (insensibilité à la casse, multiligne, etc.).
Tableau des Identificateurs Courants
| Identificateur | Description | Espace blanc | Échappement spécial |
|---|---|---|---|
| \d | Tout chiffre (0-9) | \n | ., +, *, ?, [], $, ^, (, ), {}, |, \ |
| \D | Non-chiffre | \s | |
| \s | Espace, tabulation, nouvelle ligne, etc. | \t | |
| \S | Non-espace | \e | |
| \w | Alphanumérique plus underscore | \r | |
| \W | Non-alphanumérique (hors underscore) | \f | |
| . | Tout caractère sauf nouvelle ligne | — | |
| \b | Frontière de mot | — | |
| \. | Point littéral | — | |
| \{x} | Exactement x occurrences | — |
Démarrage avec re
import re
Le module re fait partie de la bibliothèque standard de Python et ne nécessite aucune dépendance externe. Cas d'usage courants :
- Validation de chaînes (ex: adresses email, numéros de téléphone)
- Extraction de données depuis du texte non structuré
- Web scraping automatisé
Exemple 1 : \w+ et ^
^— ancre au début d'une chaîne.\w+— un ou plusieurs caractères de mot (lettres, chiffres, underscore).
En les utilisant, on peut capturer le premier mot d'une chaîne :
import re sample = "guru99, education is fun" result = re.findall(r"^\w+", sample) print(result) # Output: ['guru99']
Enlever le + ne retournerait que le premier caractère : ["g"].
Exemple 2 : Séparation sur Espace Blanc avec \s
La fonction re.split() peut diviser une chaîne où un motif correspond. Utiliser \s sépare sur tout caractère d'espace blanc.
import re text = "we are splitting the words" print(re.split(r"\s", text)) # ['we', 'are', 'splitting', 'the', 'words']
Si le backslash est omis, s est traité comme littéral, résultant en séparations à chaque caractère s.
Vue d'Ensemble des Méthodes Regex
re.match()— vérifie une correspondance seulement au début de la chaîne.re.search()— scanne toute la chaîne et retourne la première correspondance.re.findall()— retourne une liste de toutes les correspondances non chevauchantes.
Utilisation de re.match()
import re text = "guru99 is a great platform" match = re.match(r"^\w+", text) print(match.group() if match else "Pas de correspondance") # Output: guru99
Utilisation de re.search()
import re
text = "Software Testing is fun"
for pattern in ["Software testing", "guru99"]:
found = re.search(pattern, text, re.IGNORECASE)
print(f"Recherche de '{pattern}' dans '{text}' - {'trouvé !' if found else 'pas de correspondance'}")
Utilisation de re.findall()
import re
emails = "guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com"
found = re.findall(r"[\w\.-]+@[\w\.-]+", emails)
for e in found:
print(e)
Drapeaux (Flags) Regex
Les drapeaux modifient le comportement du motif. Drapeaux courants :
| Drapeau | Description |
|---|---|
| re.M (re.MULTILINE) | Fait correspondre ^ et $ au début et fin de chaque ligne. |
| re.I (re.IGNORECASE) | Ignore les distinctions de casse. |
| re.S (re.DOTALL) | Fait correspondre le point aux nouvelles lignes. |
| re.U (re.UNICODE) | Applique des classes de caractères conscientes d'Unicode. |
| re.L (re.LOCALE) | Fait dépendre les classes de la locale courante. |
| re.X (re.VERBOSE) | Permet espaces et commentaires dans le motif. |
Exemple Multiligne
import re text = """guru99 careerguru99 selenium""" print(re.findall(r"^\w", text)) # ['g'] print(re.findall(r"^\w", text, re.MULTILINE)) # ['g', 'c', 's']
Compatibilité Python 2
Tous les exemples ci-dessus sont écrits pour Python 3. Si vous devez les exécuter sous Python 2, remplacez les instructions print() par la syntaxe Python 2 et assurez-vous que le module re est importé de la même façon.
À Retenir
Maîtriser les regex Python vous donne une boîte à outils puissante pour le traitement de texte :
- Utilisez
re.match()pour les motifs ancrés au début. - Utilisez
re.search()pour une recherche globale. - Utilisez
re.findall()pour extraire toutes les correspondances. - Appliquez les drapeaux (ex:
re.IGNORECASE,re.MULTILINE) pour affiner le comportement. - N'oubliez pas de tester les motifs avec Regex101 ou outils similaires avant déploiement.
Python
- Maîtriser la méthode strip() de Python : Guide complet et exemples pratiques
- Maîtriser str.count() de Python : Compter caractères et sous-chaînes avec exemples
- Maîtriser les chaînes format() en Python avec exemples clairs
- Python len() : Guide pratique pour mesurer la longueur des objets
- Maîtriser la méthode String.find() de Python : Syntaxe, Exemples et Alternatives
- Fonction Python round() expliquée avec exemples pratiques
- Maîtriser la fonction Python map() : syntaxe, exemples et bonnes pratiques
- Python timeit() : mesurer le temps d'exécution avec exemples pratiques
- Python Counter dans collections : comptage efficace, mise à jour et opérations arithmétiques