OUJOOD.COM
Importer le module re
Le module re fait partie de la bibliothèque standard Python. On l'importe avant toute utilisation. Voici un premier exemple qui cherche le mot "expressions" dans une chaîne et récupère sa position.
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") signifie chaîne brute : le caractère \ n'est pas interprété comme un caractère d'échappement Python, ce qui évite des conflits avec la syntaxe des RegEx.
Les métacaractères
Les métacaractères sont des caractères spéciaux qui ont une signification précise dans un motif RegEx. En voici les principaux :
| 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 par \ et désignent des catégories de caractères ou des positions 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 garantit que les séquences \ sont transmises telles quelles au moteur d'expressions régulières.
Les ensembles de caractères
Un ensemble se définit avec des crochets [] et correspond à l'un des caractères qu'il contient.
| 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 aucune correspondance n'est trouvée, la liste est 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. L'objet Match expose des méthodes pour récupérer la position et la valeur.
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 partout où le motif correspond et retourne une liste. Le paramètre maxsplit limite le nombre de découpages. Le paramètre flags=re.IGNORECASE rend la recherche insensible à 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 de remplacement. Un quatrième paramètre count limite le nombre de remplacements.
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
Les fonctions search() et match() retournent un objet Match quand une correspondance est trouvée. Cet objet expose plusieurs attributs et méthodes utiles.
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 24 avril 2026