Le pochoir
Un pochoir ne laisse passer la peinture que là où il est découpé. Une expression régulière est un pochoir pour le texte : seuls les textes qui ont exactement la bonne forme passent.
Écrire un motif pour reconnaître un format de texte (téléphone, e-mail, code), et l'utiliser en Python pour valider, chercher, extraire et remplacer.
Le formulaire d'inscription d'un club sportif à Oujda reçoit n'importe quoi : des téléphones à 9 chiffres, des e-mails sans @, des codes postaux avec des lettres. Vérifier chaque format avec des dizaines de if serait long et fragile. Une expression régulière décrit le format attendu en une ligne, et Python vérifie le reste.
Le motif ^0[67]\d{8}$ décrit un mobile marocain. On le compare au texte 0661234567, morceau par morceau.
Une expression régulière (regex) est un motif qui décrit la forme d’un texte. En Python, on l’utilise avec le module re et on écrit le motif dans une chaîne brute r"..." pour que les \ ne soient pas interprétés.
| Symbole | Signification | Exemple |
|---|---|---|
\d | un chiffre | \d\d → 42 |
\w | une lettre, un chiffre ou _ | \w+ → Salma_2 |
\s | un espace | |
. | n’importe quel caractère | |
[67] | un caractère parmi la liste | 0[67] → 06, 07 |
[A-Z] | une lettre de A à Z | |
{n} / {n,m} | exactement n / entre n et m fois | \d{8} |
+ / * / ? | 1 ou plus / 0 ou plus / 0 ou 1 | \d+ |
^ / $ | début / fin du texte | |
( ) | un groupe à extraire | (\d{2})/ |
re| Fonction | Rôle |
|---|---|
re.fullmatch(motif, texte) | tout le texte respecte-t-il le motif ? |
re.match(motif, texte) | le début du texte respecte-t-il le motif ? |
re.search(motif, texte) | première correspondance n’importe où |
re.findall(motif, texte) | liste de toutes les correspondances |
re.sub(motif, remplacement, texte) | remplacer les correspondances |
re.compile(motif) | préparer un motif réutilisé souvent |
Une correspondance trouvée est un objet Match : m.group() donne le texte trouvé, m.groups() les groupes entre parenthèses.
Ranger les motifs dans un attribut de classe, comme Validateur.MOTIFS, évite de les recopier partout : on les corrige à un seul endroit.
Un pochoir ne laisse passer la peinture que là où il est découpé. Une expression régulière est un pochoir pour le texte : seuls les textes qui ont exactement la bonne forme passent.
Un mobile marocain commence par 06 ou 07 et compte 10 chiffres. En regex : un 0, puis 6 ou 7, puis 8 chiffres.
import re motif = r"^0[67]\d{8}$" print(bool(re.match(motif, "0612345678"))) # True print(bool(re.match(motif, "0512345678"))) # False
Une CIN marocaine commence par une ou deux lettres majuscules suivies de 1 à 6 chiffres (ex. AB123456, K45678). Écrivez le motif et testez-le.
import re motif = r"^[A-Z]{1,2}\d{1,6}$" for cin in ["AB123456", "K45678", "ab1234", "ABC12"]: print(cin, bool(re.fullmatch(motif, cin)))
Dans le texte « Thé 18 DH, sucre 12.50 DH, menthe 5 DH », extrayez tous les prix sous forme de nombres et faites la somme.
import re texte = "Thé 18 DH, sucre 12.50 DH, menthe 5 DH" prix = [float(p) for p in re.findall(r"(\d+(?:\.\d+)?) DH", texte)] print(prix, sum(prix)) # [18.0, 12.5, 5.0] 35.5
Remplacez toutes les suites d'espaces d'un texte par un seul espace, et supprimez les espaces au début et à la fin.
import re texte = " Bonjour tout le monde " propre = re.sub(r"\s+", " ", texte).strip() print(f"[{propre}]")