OUJOOD.COM
Importer le module re
Le module re fait partie de la bibliothèque standard Python — rien à installer. On l'importe en tête de fichier avant toute utilisation. L'exemple ci-dessous cherche le mot « expressions » dans une chaîne et récupère sa position exacte.
import re match = re.search(r"expressions", "Avec oujood, apprendre les expressions régulières de Python") print(match) # <re.Match object; span=(27, 38), match='expressions'> print(match.group()) # expressions print("Index de départ :", match.start()) # 27 print("Index de fin :", match.end()) # 38
Le préfixe r devant la chaîne (r"expressions") produit une chaîne brute : le caractère \ n'est pas interprété par Python, ce qui évite les conflits avec la syntaxe des RegEx.
Les métacaractères
Un métacaractère est un symbole qui a une signification réservée dans un motif RegEx. Les voici avec un exemple pour chacun :
| Métacaractère | Description | Exemple |
|---|---|---|
\ | Supprime la signification spéciale du caractère suivant | \d |
[] | Représente un ensemble de caractères | [a-m] |
^ | Correspond au début de la chaîne | ^bon |
$ | Correspond à la fin de la chaîne | planet$ |
. | Correspond à n'importe quel caractère sauf le saut de ligne | bo..j |
| | OU logique entre deux motifs | falls|stays |
? | Zéro ou une occurrence | he.?o |
{} | Nombre exact d'occurrences | he.{2}o |
* | Zéro ou plusieurs occurrences | he.*o |
+ | Une ou plusieurs occurrences | he.+o |
() | Groupe de motifs | (abc)+ |
Les séquences spéciales
Les séquences spéciales commencent toutes par \ et désignent soit une catégorie de caractères, soit une position dans la chaîne.
| Séquence | Description | Exemple |
|---|---|---|
\A | Début de la chaîne | \AThe |
\b | Début ou fin d'un mot | r"\bain" |
\B | Pas en début ni en fin de mot | r"\Bain" |
\d | Chiffre (0 à 9) | \d |
\D | Tout caractère non numérique | \D |
\s | Espace blanc (espace, tabulation, saut de ligne) | \s |
\S | Tout caractère non espace | \S |
\w | Lettre, chiffre ou underscore | \w |
\W | Tout caractère non alphanumérique | \W |
\Z | Fin de la chaîne | Spain\Z |
Le préfixe r devant une chaîne RegEx transmet les séquences \ telles quelles au moteur d'expressions régulières, sans interprétation Python préalable.
Les ensembles de caractères
Un ensemble se définit avec des crochets [] et correspond à l'un des caractères qu'il contient. À l'intérieur d'un ensemble, les métacaractères perdent leur signification spéciale et sont traités comme des caractères littéraux.
| Ensemble | Description |
|---|---|
[arn] | Correspond à a, r ou n |
[a-n] | Tout caractère minuscule entre a et n |
[^arn] | Tout caractère sauf a, r et n |
[0-9] | Tout chiffre entre 0 et 9 |
[0-5][0-9] | Tout nombre à deux chiffres entre 00 et 59 |
[a-zA-Z] | Toute lettre minuscule ou majuscule |
[+] | Le caractère + littéral (les métacaractères perdent leur sens dans un ensemble) |
re.findall() : toutes les correspondances
findall() retourne une liste de toutes les correspondances non chevauchantes. Si rien ne correspond, la liste est vide — pas d'erreur, juste une liste vide.
import re texte = "Mon adresse est numéro 6 rue 16 bloc 25, et celle de mon ami est 98 rue 25 bloc 56" # \d+ correspond à une séquence de chiffres match = re.findall(r"\d+", texte) print(match) # ['6', '16', '25', '98', '25', '56']
re.search() : première correspondance
search() parcourt la chaîne et retourne un objet Match pour la première correspondance trouvée. Si aucune correspondance n'existe, elle retourne None — à tester avant d'appeler les méthodes de l'objet Match.
import re # Cherche un jour (00-39) suivi d'un nom de mois regex = r" ([0-3][0-9]) ([a-zA-Z]+)" texte = "Ma date de naissance est le 22 Aout" resultat = re.search(regex, texte) if resultat and int(resultat.group(1)) <= 31: print("Trouvé à l'index %s-%s" % (resultat.start(), resultat.end())) print("Résultat complet :", resultat.group(0)) print("Jour :", resultat.group(1)) # 22 print("Mois :", resultat.group(2)) # Aout else: print("Aucun résultat trouvé.")
re.split() : diviser selon un motif
split() découpe une chaîne à chaque endroit où le motif correspond et retourne une liste. Deux paramètres optionnels : maxsplit pour limiter le nombre de découpages, et flags=re.IGNORECASE pour ignorer la casse.
from re import split texte1 = "Words, words , Words" texte2 = "Word's words Words" # \W+ : découpe sur tout caractère non alphanumérique print(split(r'\W+', texte1)) # ['Words', 'words', 'Words'] print(split(r'\W+', texte2)) # ['Word', 's', 'words', 'Words'] texte3 = "Le 12 janvier 2016, à 11:02 AM" print(split(r'\W+', texte3)) # ['Le', '12', 'janvier', '2016', 'à', '11', '02', 'AM'] print(split(r'\d+', texte3)) # ['Le ', ' janvier ', ', à ', ':', ' AM']
import re texte1 = "Le 12 Janvier 2016, à 11:02 AM" texte2 = "He, Un Garçon et un garçon, venez ici" # maxsplit=1 : un seul découpage print(re.split(r'\d+', texte1, 1)) # ['Le ', ' Janvier 2016, à 11:02 AM'] # flags=re.IGNORECASE : insensible à la casse print(re.split(r'[e-g]+', texte2, flags=re.IGNORECASE)) print(re.split(r'[e-g]+', texte2))
re.sub() : remplacer des correspondances
sub(pattern, remplacement, texte) remplace toutes les occurrences du motif par la chaîne indiquée. Un quatrième paramètre count limite le nombre de remplacements effectués.
import re texte = 'abc de 12 fg \n 34 h57 68 kil' # Remplacer tous les espaces blancs par un underscore new_texte = re.sub(r'\s+', '_', texte) print(new_texte) # abc_de_12_fg_34_h57_68_kil # Avec count=2 : seulement les 2 premières occurrences new_texte2 = re.sub(r'\s+', '_', texte, 2) print(new_texte2)
L'objet Match
search() et match() retournent un objet Match quand une correspondance est trouvée. Cet objet expose plusieurs attributs et méthodes pour lire la correspondance et sa position dans la chaîne d'origine.
import re
texte = "Bienvenue sur le site oujood.com"
resultat = re.search("site", texte)
print(resultat.re) # re.compile('site') — l'expression utilisée
print(resultat.string) # la chaîne dans laquelle on a cherché
print(resultat.start()) # index de début de la correspondance
print(resultat.end()) # index de fin
print(resultat.span()) # tuple (début, fin)
import re s = "J'apprends Python avec le site oujood.com" # \D{6} : 6 caractères non numériques, suivis d'un espace et d'un "a" resultat = re.search(r"\D{6} a", s) print(resultat.group()) # Python a
Par carabde | Mis à jour le 15 mai 2026