Contactez-nous

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.