Python Programming

Maîtriser les caractères génériques Regex avec re.sub() de Python

Spread the love

Les expressions régulières (regex ou regexp) sont des outils puissants pour la correspondance de motifs dans les chaînes de caractères. Le module re de Python offre des fonctionnalités robustes pour les opérations regex, les caractères génériques jouant un rôle crucial. Cet article explore comment utiliser efficacement les caractères génériques avec la fonction re.sub() pour diverses tâches de manipulation de chaînes de caractères.

Table des matières

Substitutions Regex de base avec caractères génériques

La fonction re.sub() est fondamentale pour les substitutions regex. Sa syntaxe est re.sub(pattern, replacement, string, count=0, flags=0). Le pattern est une expression régulière, replacement est la chaîne de substitution, string est l’entrée, count limite les substitutions, et flags modifie le comportement de la correspondance. Les caractères génériques améliorent considérablement la flexibilité du pattern.

Remplaçons toutes les voyelles d’une chaîne par « X » :


import re

text = "Hello, World!"
replaced_text = re.sub(r"[aeiou]", "X", text, flags=re.IGNORECASE)
print(f"Original: {text}")
print(f"Remplacé: {replaced_text}")

[aeiou] est un ensemble de caractères génériques correspondant à n’importe quelle voyelle (insensible à la casse grâce à re.IGNORECASE).

Utilisation avancée des caractères génériques et quantificateurs

re.sub() prend en charge les caractères génériques complexes. Remplaçons les séquences d’un ou plusieurs chiffres par « NUMERO » :


import re

text = "Mon numéro de téléphone est 123-456-7890 et mon code postal est 90210."
replaced_text = re.sub(r"d+", "NUMERO", text)
print(f"Original: {text}")
print(f"Remplacé: {replaced_text}")

d+ correspond à un ou plusieurs chiffres (d correspond à un chiffre, + signifie une ou plusieurs répétitions).

Voici un tableau résumant les principaux caractères génériques :

Caractère générique Description
. Correspond à n’importe quel caractère sauf le saut de ligne.
* Correspond à zéro ou plusieurs occurrences de l’élément précédent.
+ Correspond à une ou plusieurs occurrences de l’élément précédent.
? Correspond à zéro ou une occurrence de l’élément précédent.
[] Définit un ensemble de caractères (par exemple, [abc]).
[^] Définit un ensemble de caractères niés (par exemple, [^abc]).
() Crée un groupe de capture.
Échappe les caractères spéciaux (par exemple, . correspond à un point littéral).

Combinaison de caractères génériques pour des motifs complexes

La combinaison de caractères génériques crée des motifs puissants. Remplaçons les mots commençant par « a » suivis de n’importe quels caractères :


import re

text = "Une pomme par jour éloigne le médecin."
replaced_text = re.sub(r"aw*", "MOT", text, flags=re.IGNORECASE)
print(f"Original: {text}")
print(f"Remplacé: {replaced_text}")

aw* correspond à « a » suivi de zéro ou plusieurs caractères alphanumériques (w).

Exemples concrets : extraction d’adresses e-mail et de numéros de téléphone

re.sub() excelle dans la gestion de motifs complexes. Remplaçons les adresses e-mail par « EMAIL » :


import re

text = "Contactez-nous à [email protected] ou [email protected]."
replaced_text = re.sub(r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}", "EMAIL", text)
print(f"Original: {text}")
print(f"Remplacé: {replaced_text}")

Cette expression régulière correspond à un format d’e-mail courant.

Conclusion

La fonction re.sub(), combinée aux caractères génériques regex, offre une méthode flexible et efficace pour la manipulation de chaînes de caractères en Python. La maîtrise de ces techniques est précieuse pour les tâches de traitement de texte et de nettoyage de données. Une construction minutieuse des expressions régulières est cruciale pour éviter les remplacements inattendus. L’expérimentation et la compréhension des nuances des caractères génériques sont la clé d’une manipulation efficace des chaînes de caractères.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *