
Utilisations courantes : validation de données, extraction d'informations...
Découvrez des exemples concrets d'utilisation des expressions régulières en Python : validation de données (emails, numéros de téléphone, dates), extraction d'informations (liens, adresses IP, tags HTML), et transformation de texte.
Validation de données : vérifier le format d'une entrée
Les expressions régulières sont souvent utilisées pour valider le format des données entrées par un utilisateur ou lues depuis un fichier. Par exemple, vous pouvez vérifier si une chaîne de caractères ressemble à une adresse e-mail, un numéro de téléphone, une date, un code postal, etc.
Pour la validation, on utilise généralement `re.match()` (ou `re.fullmatch()`, disponible depuis Python 3.4, qui vérifie que la chaîne *entière* correspond au motif) pour s'assurer que la chaîne *complète* correspond au motif, et pas seulement une partie de la chaîne.
Exemples :
- Valider une adresse e-mail (simplifié) :
import re
motif_email = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
email = "test@example.com"
if re.match(motif_email, email):
print("Adresse e-mail valide")
else:
print("Adresse e-mail invalide")
email_invalide = "test@.com"
if re.match(motif_email, email_invalide):
print("Adresse e-mail valide")
else:
print("Adresse e-mail invalide")- Valider un numéro de téléphone (simplifié, format français) :
import re
motif_telephone = r"^(?:0|\+33|0033)[1-9](?:[\.\-\s]?\d{2}){4}$"
telephone = "01.23.45.67.89"
if re.match(motif_telephone, telephone):
print("Numéro de téléphone valide")
else:
print("Numéro de téléphone invalide")- Valider une date (format JJ/MM/AAAA) :
import re
motif_date = r"^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/\d{4}$"
date = "24/07/2024"
if re.match(motif_date, date):
print("Date valide")
else:
print("Date invalide")Notez que ces exemples sont simplifiés. Valider complètement une adresse e-mail ou un numéro de téléphone avec une expression régulière peut être très complexe. Il est souvent préférable d'utiliser des bibliothèques spécialisées pour ces tâches.
L'important est de comprendre comment utiliser `re.match()` (ou `re.fullmatch()`) pour vérifier si une chaîne *complète* correspond à un motif donné.
Extraction d'informations : récupérer des données spécifiques
Les expressions régulières peuvent être utilisées pour extraire des informations spécifiques d'une chaîne de caractères. Pour cela, on utilise souvent des *groupes de capture* (parenthèses) dans l'expression régulière.
Exemples :
- Extraire les différentes parties d'une URL :
import re
url = "https://www.example.com/page?param1=valeur1¶m2=valeur2"
motif = r"^(https?)://(www\.[a-zA-Z0-9.-]+)(/[^?#]*)?(?:\?([^#]*))?(?:#(.*))?$"
resultat = re.match(motif, url)
if resultat:
protocole = resultat.group(1) # Premier groupe : "http" ou "https"
domaine = resultat.group(2) # Deuxième groupe : "www.example.com"
chemin = resultat.group(3) # Troisième groupe : "/page" (ou None)
parametres = resultat.group(4) # Quatrième groupe : "param1=valeur1¶m2=valeur2" (ou None)
ancre = resultat.group(5) # Cinquième groupe : (ou None)
print(f"Protocole : {protocole}")
print(f"Domaine : {domaine}")
print(f"Chemin : {chemin}")
print(f"Paramètres : {parametres}")
print(f"Ancre : {ancre}")- Extraire des adresses IP d'un texte :
import re
texte = "Mon adresse IP est 192.168.1.1 et celle du serveur est 10.0.0.1."
motif = r"\b(?:\d{1,3}\.){3}\d{1,3}\b" # Motif pour une adresse IPv4
adresses_ip = re.findall(motif, texte) # Utilisation de findall pour trouver toutes les occurrences
print(adresses_ip) # Affiche ['192.168.1.1', '10.0.0.1']- Extraire des tags HTML (simplifié, à utiliser avec prudence) :
import re
html = "Ceci est un paragraphe avec du texte en italique.
"
motif = r"<([^>]+)>" # Trouve les tags (simplifié)
tags = re.findall(motif, html)
print(tags) # Affiche ['p', 'b', '/b', 'i', '/i', '/p']
# Note : Pour analyser du HTML de manière fiable, il est préférable d'utiliser un parseur HTML dédié (comme BeautifulSoup).Les expressions régulières peuvent être utilisées pour extraire toutes sortes d'informations de textes non structurés ou semi-structurés.
Transformation de texte : remplacer et modifier
Les expressions régulières peuvent également être utilisées pour transformer du texte, en remplaçant des portions de texte correspondant à un motif par une autre chaîne.
On utilise la fonction `re.sub()` pour cela.
Exemples :
- Remplacer toutes les occurrences d'un mot :
import re
texte = "Le chat est sur le tapis, le chat dort."
nouveau_texte = re.sub(r"chat", "chien", texte) # Remplace "chat" par "chien"
print(nouveau_texte) # Affiche "Le chien est sur le tapis, le chien dort."- Supprimer des caractères indésirables :
import re
texte = "Texte avec des espaces superflus."
nouveau_texte = re.sub(r"\s+", " ", texte) # Remplace plusieurs espaces par un seul
print(nouveau_texte) # Affiche "Texte avec des espaces superflus."- Mettre en forme des données :
import re
dates = "24/07/2024, 12/01/2023, 01/06/2024"
# Remplacer les dates JJ/MM/AAAA par des dates AAAA-MM-JJ
nouveau_texte = re.sub(r"(\d{2})/(\d{2})/(\d{4})", r"\3-\2-\1", dates)
print(nouveau_texte) # Affiche "2024-07-24, 2023-01-12, 2024-06-01"Dans cet exemple, on utilise des groupes de capture (`\1`, `\2`, `\3`) pour réorganiser les parties de la date.
Les expressions régulières sont un outil puissant pour la transformation de texte, mais elles peuvent rapidement devenir complexes. Il est important de tester soigneusement vos expressions régulières et de les documenter.