Aller au contenu principal
Python intermédiaire2026-07-31 · 11 min de lecture

Python Regex expliqué (2026)

Regex est la fonctionnalité la plus redoutée de Python. Ce n'est pas si difficile, mais 80 % des didacticiels abordent la théorie (\d, \w, gourmand vs paresseux) avant de vous montrer un seul modèle que vous utiliseriez réellement dans du code réel. Ce tutoriel inverse cela.

Nous couvrirons : les bases du module re, les cinq modèles qui couvrent 90 % du travail réel, quand re.compile aide réellement, les groupes nommés ou numérotés, et les quatre cas où l'expression régulière est le MAUVAIS outil.

Le module en 60 secondes

Tout réside dans le module stdlib re. Trois fonctions couvrent la plupart des besoins :

▶ PYTHONeditable · runs in your browser

Règle : utilisez re.search en cas de doute. re.match vérifie uniquement le début ; oublier que cela conduit à "mon regex ne correspond pas!" 30 minutes perdues.

Chaînes brutes — utilisez-les toujours

Le préfixe r"..." désactive l'interprétation de la barre oblique inverse. Sans cela, "\d" devient "\\d" en Python, que le moteur d'expression régulière considère comme \d — même résultat, mais seulement par accident et uniquement pour \d. "\n" dans une expression régulière est une nouvelle ligne, pas les deux caractères ` + n`.

▶ PYTHONeditable · runs in your browser

Mémoire musculaire : chaque littéral d'expression régulière commence par « r ». Aucune exception.

Les 5 patrons qui couvrent 90% du vrai travail

1. Extraire tous les entiers du texte

▶ PYTHONeditable · runs in your browser

Notez que 199,99 se divise en ['199', '99'] — \d+ ne traverse pas le point. Utilisez r"\d+(?:\.\d+)?" pour les décimales facultatives :

▶ PYTHONeditable · runs in your browser

2. Normaliser les espaces

▶ PYTHONeditable · runs in your browser

\s+ correspond à n'importe quelle série d'espaces/tabulations/nouvelles lignes. Remplacez par un seul espace, dénudez les bords. C'est la réponse de Python à sed -E 's/[[:space:]]+/ /g'.

3. Extrayez le nom d'hôte d'une URL

▶ PYTHONeditable · runs in your browser

Les parenthèses créent un groupe de capture ; .group(1) renvoie son contenu. [^/:]+ = "un ou plusieurs caractères qui ne sont pas / ou :" — s'arrête au séparateur de port OU au chemin.

Pour l'analyse des URL de production, utilisez urllib.parse.urlparse (gère les cas extrêmes comme userinfo + IPv6). Regex est destiné à une extraction rapide et sale.

4. Validation lâche des e-mails

Il n'y a AUCUNE expression régulière qui valide entièrement les e-mails conformément à la RFC 5322. Quiconque vous dit le contraire vend quelque chose. Mais celui-ci capte 99 % des vraies adresses sans rejeter à tort les bonnes :

▶ PYTHONeditable · runs in your browser

Les ancres (^ et $) forcent la correspondance de chaîne complète. Sans eux, "foo@bar" à l'intérieur d'une phrase plus longue correspondrait.

Production : envoyer un email de confirmation. C'est le SEUL validateur d'e-mails fiable.

5. Groupes de capture nommés

Les groupes numérotés ((...) + .group(1)) conviennent pour 2-3 captures. Au-delà, les noms gagnent :

▶ PYTHONeditable · runs in your browser

.groupdict() renvoie un dict de tous les groupes nommés. Ajoutez/réorganisez des groupes sans interrompre chaque site d'appel faisant référence à .group(3).

re.compile — quand cela aide réellement

▶ PYTHONeditable · runs in your browser

stdlib maintient un petit cache de modèles compilés (taille par défaut 512), donc les appels ponctuels re.search(pattern, text) sont effectivement gratuits après le premier appel. re.compile aide explicitement lorsque :

1. Le motif est utilisé dans une boucle serrée (des millions de correspondances).

2. Vous souhaitez stocker le modèle en tant que constante au niveau du module pour la capacité grep.

3. Vous avez besoin de .finditer(), .pattern, .flags sur l'objet compilé.

Ne surcompilez pas. Chaque « re.compile » au niveau du module ajoute un petit coût de temps d'importation.

Drapeaux communs

▶ PYTHONeditable · runs in your browser

Combiner avec | : re.IGNORECASE | re.MULTILINE.

Quand l'expression régulière est le MAUVAIS outil

1. Analyser HTML / XML → utiliser un vrai analyseur

▶ PYTHONeditable · runs in your browser

La réponse classique de Stack Overflow à cette question date de 20 ans et est toujours vraie.

2. Analyser JSON → utilisez json

Le module json gère les guillemets imbriqués, les caractères d'échappement, Unicode et tous les cas extrêmes RFC 8259. JSON d'analyse Regex est un signal anti-modèle.

3. Analyser les dates → utilisez dateutil ou datetime.strptime

dateutil.parser.parse("2026-07-30") accepte tous les formats qu'un humain peut saisir. datetime.strptime gère efficacement les formats connus. Les deux gèrent les fuseaux horaires. Regex devrait tout réinventer.

4. Modèles imbriqués/récursifs → utiliser un générateur d'analyseur

Les expressions à parenthèses correspondantes, JSON imbriquées et équilibrées dépassent formellement le pouvoir des regex (territoire de grammaire sans contexte). Utilisez pyparsing / lark / ANTLR — ou parcourez simplement la chaîne avec un petit analyseur.

Regex de débogage

Utilisez regex101.com (choisissez la saveur "Python"). Collez le motif + exemple de texte ; il met en évidence les correspondances en temps réel, explique chaque métacaractère et affiche les groupes nommés. Le moyen le plus rapide d’apprendre les regex de manière intuitive.

Pour le débogage au niveau du code, re.DEBUG imprime la machine à états compilée :

▶ PYTHONeditable · runs in your browser

Pratique

Écrivez une expression régulière pour chacun. Solutions ci-dessous.

1. Extrayez le numéro de version de « Python 3.13.2 (principal, 15 janvier 2026, 10:32:11) » – devrait renvoyer « 3.13.2 ».

2. Divisez « pomme, banane ; orange cerise » sur n'importe quel délimiteur (,, ; ou espace).

3. Réécrivez « foo.bar_baz-123 » en « FOO.BAR_BAZ-123 » (lettres majuscules uniquement, laissez les chiffres et la ponctuation).

Solutions :

▶ PYTHONeditable · runs in your browser

Regex est un super pouvoir une fois que vous avez dépassé les 10 premiers modèles. L’astuce consiste à développer la mémoire musculaire sur les cinq ci-dessus : ils couvrent 90 % du travail réel. Recherchez un véritable analyseur au moment où vous vous retrouvez à écrire des références arrière pour équilibrer les parenthèses.

Étape suivante : cours d'expression régulière + traitement de texte dans le volet Automatisation – entraînement sur les fichiers journaux, les données CSV et les tâches de web-scraping avec du vrai Python exécuté dans votre navigateur.

Prêt à l'essayer ?

15 cours gratuits après une inscription gratuite — pas de carte. Goûtez à la plateforme, puis décidez.

Commencez gratuitement →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.