Module re de Python
Celui de Pythonremodule est un module de bibliothèque standard pour gérer les expressions régulières.
Les expressions régulières (Regular Expression, abrégé en regex ou regexp) sont un outil puissant pour faire correspondre, rechercher et manipuler du texte.
En utilisantrele module, vous pouvez utiliser les expressions régulières en Python pour traiter les chaînes de caractères.
Pourquoi utiliser le module re ?
Dans le traitement de texte, nous avons souvent besoin de trouver des motifs spécifiques ou de remplacer certains caractères. Par exemple, valider des adresses e-mail, extraire des liens de pages web ou formater du texte. Écrire du code manuellement pour accomplir ces tâches peut être très fastidieux, alors que les expressions régulières offrent un moyen concis et efficace de résoudre ces problèmes.
Utilisation de base du module re
1. Importer le module re
Avant d'utiliserrele module, vous devez d'abord l'importer :
import re
2. Fonctions courantes du module re
2.1 re.match()
re.match()La fonction est utilisée pour faire correspondre une expression régulière depuis le début d'une chaîne. Si la correspondance réussit, elle renvoie un objet de correspondance ; sinon, elle renvoieNone。
Exemple
pattern = r"hello"
text = "hello world"
match = re.match(pattern, text)
if match:
print("Match successful:", match.group())
else:
print("Match failed")
Sortie :
匹配成功: hello
2.2 re.search()
re.search()La fonction est utilisée pour rechercher la première correspondance d'une expression régulière dans une chaîne. Contrairement àre.match()différent,re.search()n'exige pas que la correspondance commence au début de la chaîne.
Exemple
pattern = r"world"
text = "hello world"
match = re.search(pattern, text)
if match:
print("Match successful:", match.group())
else:
print("Match failed")
Sortie :
匹配成功: world
2.3 re.findall()
re.findall()La fonction est utilisée pour trouver toutes les sous-chaînes d'une chaîne qui correspondent à l'expression régulière, et renvoie une liste.
Exemple
pattern = r"\d+"
text = "Il y a 3 pommes et 5 oranges."
matches = re.findall(pattern, text)
print("Nombres trouvés :", matches)
Sortie :
找到的数字: ['3', '5']
2.4 re.sub()
re.sub()La fonction est utilisée pour remplacer les parties d'une chaîne qui correspondent à l'expression régulière.
Exemple
pattern = r"pomme"
text = "J'ai une pomme."
new_text = re.sub(pattern, "banane", text)
print("Texte remplacé :", new_text)
Sortie :
替换后的文本: I have an banana.
Syntaxe de base des expressions régulières
1. Caractères ordinaires
Les caractères ordinaires (tels que les lettres, les chiffres) correspondent directement à eux-mêmes.
Exemple
pattern = r"chat"
text = "Le chat est sur le tapis."
match = re.search(pattern, text)
if match:
print("Match successful:", match.group())
Sortie :
匹配成功: cat
2. Caractères spéciaux
Il existe certains caractères spéciaux dans les expressions régulières qui ont une signification particulière. Par exemple :
.: Correspond à un seul caractère quelconque (sauf un saut de ligne).*: Correspond au caractère précédent zéro ou plusieurs fois.+: Correspond au caractère précédent une ou plusieurs fois.?: Correspond au caractère précédent zéro ou une fois.\d: Correspond à tout caractère chiffre (équivalent à[0-9])。\w: Correspond à toute lettre, tout chiffre ou le caractère de soulignement (équivalent à[a-zA-Z0-9_])。
Exemple
pattern = r"\d+"
texte = "Le prix est de 100 dollars."
match = re.search(pattern, text)
if match:
print("Match successful:", match.group())
Sortie :
匹配成功: 100
3. Ensembles de caractères
Les ensembles de caractères servent à faire correspondre n'importe quel caractère d'un ensemble. Par exemple,[abc]matchesa、bouc。
Exemple
motif = r"[aeiou]"
text = "Bonjour le monde !"
matches = re.findall(pattern, text)
print("Voyelles trouvées :", matches)
Sortie :
找到的元音字母: ['e', 'o', 'o']
4. Groupement
Le groupement vous permet de combiner plusieurs caractères ensemble et d'opérer sur eux. Par exemple,(abc)matchesabc。
Exemple
pattern = r"(ab)+"
text = "ababab"
match = re.search(pattern, text)
if match:
print("Match successful:", match.group())
Sortie :
匹配成功: ababab
Exercices pratiques
Exercice 1 : Valider des adresses e-mail
Écrivez une expression régulière pour valider le format d'une adresse e-mail.
Exemple
pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
email = "[email protected]"
if re.match(pattern, email):
print("Adresse e-mail valide")
else:
print("Adresse e-mail invalide")
Exercice 2 : Extraire des numéros de téléphone
Écrire une expression régulière pour extraire les numéros de téléphone d'un texte.
Exemple
pattern = r"\d{3}-\d{3}-\d{4}"
text = "Mon numéro de téléphone est 123-456-7890."
match = re.search(pattern, text)
if match:
print("Numéros de téléphone trouvés:", match.group())
1. Fonctions de base
| Méthode | Description | Exemple |
|---|---|---|
re.compile(pattern) |
Précompiler une expression régulière (améliore les performances de réutilisation) | pat = re.compile(r'\d+') |
re.search(pattern, string) |
Rechercher la première correspondance dans une chaîne | re.search(r'\d+', 'a1b2')→ correspondances'1' |
re.match(pattern, string) |
Correspondance depuis le début de la chaîne | re.match(r'\d+', '123a')→ correspondances'123' |
re.fullmatch(pattern, string) |
La chaîne entière correspond entièrement | re.fullmatch(r'\d+', '123')→ correspondances'123' |
re.findall(pattern, string) |
Retourner une liste de toutes les correspondances non chevauchantes | re.findall(r'\d+', 'a1b22c') → ['1', '22'] |
re.finditer(pattern, string) |
Retourner un itérateur de toutes les correspondances (y compris les informations de position) | for m in re.finditer(r'\d+', 'a1b2'): print(m.group()) |
re.sub(pattern, repl, string) |
Remplacer les correspondances | re.sub(r'\d+', 'X', 'a1b2') → 'aXbX' |
re.split(pattern, string) |
Diviser la chaîne par les correspondances | re.split(r'\d+', 'a1b2c') → ['a', 'b', 'c'] |
re.escape() |
Échapper les caractères spéciaux | re.escape("C:\\Users\\test.txt")
|
re.purge() |
Vider le cache | re.purge()
|
2. Objet Match (Match) méthodes/attributs
| Méthode/Attribut | Description | Exemple |
|---|---|---|
group() |
Renvoie toute la chaîne correspondante | m.group() → 'abc' |
group(n) |
Renvoie le contenu du n-ième groupe de capture | m = re.search(r'(\d)(\d)', '12'); m.group(1) → '1' |
groups() |
Renvoie un tuple de tous les groupes de capture | m.groups() → ('1', '2') |
start()/end() |
Position de début/fin de la correspondance | m.start() → 0 |
span() |
Renvoie la plage de correspondance(start, end) |
m.span() → (0, 2) |
3. Métacaractères d'expression régulière (partiel)
| Métacaractère | Description | Exemple de correspondance |
|---|---|---|
. |
Correspond à n'importe quel caractère (sauf saut de ligne) | a.c → 'abc' |
\d |
Correspond à un chiffre | \d+ → '123' |
\D |
Correspond à un caractère autre qu'un chiffre | \D+ → 'abc' |
\w |
Correspond à un caractère de mot (lettre, chiffre, tiret bas) | \w+ → 'Ab_1' |
\W |
Correspond à un caractère autre qu'un caractère de mot | \W+ → '!@#' |
\s |
Correspond à un caractère d'espacement (espace, tabulation, etc.) | \s+ → ' \t' |
\S |
Correspond à un caractère autre qu'un espacement | \S+ → 'abc' |
[] |
Jeu de caractères | [A-Za-z]→ n'importe quelle lettre |
^ |
Correspond au début d'une chaîne | ^\d+→ chiffre au début |
$ |
Correspond à la fin d'une chaîne | \d+$→ chiffre à la fin |
* |
Correspond au caractère précédent zéro ou plusieurs fois | a* → '', 'aaa' |
+ |
Correspond au caractère précédent une ou plusieurs fois | a+ → 'a', 'aaa' |
? |
Correspond au caractère précédent zéro ou une fois | a? → '', 'a' |
{m,n} |
Correspond au caractère précédent de m à n fois | a{2,3} → 'aa', 'aaa' |
| |
Opération OU | cat|dog → 'cat'ou'dog' |
() |
Groupe de capture | (\d+)→ extraire les chiffres |
4. Options de compilation (flagsparamètre)
| Option | Description | Exemple |
|---|---|---|
re.IGNORECASE (re.I) |
Ignorer la casse | re.search(r'abc', 'ABC', re.I) |
re.MULTILINE (re.M) |
Mode multiligne (affecte^et$) |
re.findall(r'^\d+', '1\n2', re.M) → ['1', '2'] |
re.DOTALL (re.S) |
Soit.Correspond à tous les caractères, y compris les sauts de ligne |
re.search(r'a.*b', 'a\nb', re.S) |
re.ASCII |
Soit\w, \Wetc. ne correspondent qu'aux caractères ASCII |
re.search(r'\w+', 'こん', re.ASCII)→ aucune correspondance |
re.VERBOSE (re.X) |
Autoriser les commentaires et les espaces dans l'expression régulière | re.compile(r'''\d+ # 匹配数字''', re.X) |
Exemple
1. Extraire les adresses e-mail
Exemple
text = "Contact : [email protected], [email protected]"
emails = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', text)
print(emails) # Sortie : ['[email protected]', '[email protected]']
2. Remplacer les formats de date
Exemple
new_str = re.sub(r'(\d{2})-(\d{2})-(\d{4})', r'\3year\1month\2day', date_str)
print(new_str) # Sortie : "Nous sommes le 2023-05-15"
3. Correspondance multi-conditions
Exemple
^(?P<username>\w+) # nom d'utilisateur
:(?P<password>\S+) # mot de passe
@(?P<domain>\w+\.\w+) # domaine
$''', re.VERBOSE)
m = pattern.match("john:[email protected]")
if m:
print(m.groupdict()) # Sortie : {'username': 'john', 'password': 'pass123', 'domain': 'example.com'}
4. Fractionner des chaînes complexes
Exemple
parts = re.split(r'\d+', text)
print(parts) # Sortie : ['Apple', 'Banana', 'Cherry', 'Date']
Notes
-
Chaînes brutes: Il est recommandé d'utiliser des chaînes brutes pour les expressions régulières (
r'\d'), afin d'éviter les conflits de caractères d'échappement. -
Correspondance gloutonne: Correspondance gloutonne par défaut (par ex.
.*correspondra à la correspondance la plus longue possible), vous devez utiliser.*?pour implémenter une correspondance non gourmande. -
Optimisation des performances: les expressions régulières fréquemment utilisées doivent privilégier l'utilisation de
re.compile()précompilation. -
Problèmes de backtracking: les expressions régulières complexes peuvent entraîner des problèmes de performance (tels que des quantificateurs imbriqués
(a+)+)。