Expressions régulières en Python [avec exemples] : comment implémenter ?

Publié: 2021-01-29

Lors du traitement de données brutes à partir de n'importe quelle source, il est important d'extraire les bonnes informations afin d'obtenir des informations significatives à partir des données. Parfois, il devient difficile de retirer le modèle spécifique des données, en particulier dans le cas de données textuelles.

Les données textuelles consistent en des paragraphes d'informations collectées via des formulaires d'enquête, des sites Web de mise au rebut et d'autres sources. Le channing de différents accesseurs de chaîne avec des fonctions pandas ou d'autres fonctions personnalisées peut faire le travail, mais que se passe-t-il si un modèle plus spécifique doit être obtenu ? Les expressions régulières font ce travail facilement.

Table des matières

Qu'est-ce qu'une expression régulière (RegEx) ?

Une expression régulière est une représentation d'un ensemble de caractères pour les chaînes. Il présente une formule généralisée pour un modèle particulier dans les chaînes qui aide à séparer les bonnes informations du pool de données. L'expression se compose généralement de symboles ou de caractères qui aident à former la règle mais, à première vue, cela peut sembler étrange et difficile à saisir. Ces symboles ont des significations associées qui sont décrites ici.

Apprenez des cours de science des données dans les meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.

Méta-caractères dans RegEx

  1. '.' : est un caractère générique, correspond à un seul caractère (n'importe quel caractère, mais une seule fois)
  2. ^ : indique le début de la chaîne
  3. $ : indique la fin de la chaîne
  4. [ ] : correspond à l'un des ensembles de caractères entre [ ]
  5. [az] : correspond à l'un des caractères de la plage a,b,…,z
  6. [^abc] : correspond à un caractère qui n'est pas a,b ou c.
  7. a|b : correspond à a ou b, où a et b sont des chaînes
  8. () : fournit une portée pour les opérateurs
  9. \ : active l'échappement pour les caractères spéciaux (\t, \n, \b, \.)
  10. \b : correspond à la limite du mot
  11. \d : n'importe quel chiffre, équivalent à [0-9]
  12. \D : tout non-chiffre, équivalent à [^0-9]
  13. \s : tout espace blanc, équivalent à [ \t\n\r\f\v]
  14. \S : tout espace non blanc, équivalent à [^\t\n\r\f\v]
  15. \w : tout alphanumérique, équivalent à [a-zA-Z0-9_]
  16. \W : tout non-alphanumérique, équivalent à [^a-zA-Z0-9_]
  17. '*' : correspond à zéro ou plusieurs occurrences
  18. '+' : correspond à une ou plusieurs occurrences
  19. '?' : correspond à zéro ou une occurrence
  20. {n} : exactement n répétitions, n>=0
  21. {n,} : au moins n répétitions
  22. {,n} : au plus n répétitions
  23. {m,n} : au moins m répétitions et au plus n répétitions

Exemples pour comprendre la solution de contournement

Maintenant que vous connaissez les caractères qui composent une RegEx, voyons comment cela fonctionne :

1. Filtrage des e-mails :

Supposons que vous souhaitiez filtrer tous les identifiants de messagerie d'un long paragraphe. Le format général d'un e-mail est :

nom_utilisateur@nom_domaine. <top_level_domain>

Le nom d'utilisateur peut être alphanumérique, et par conséquent, nous pouvons utiliser \w pour les désigner mais il est possible que l'utilisateur crée un compte en tant que firstName.surname. Pour résoudre ce problème, nous allons échapper au point et créer un ensemble de caractères. Ensuite, domain_name ne doit être qu'alphabétique et, par conséquent, A-Za-z l'indiquera. Le domaine de premier niveau est généralement .com, .in, .org, mais selon le cas d'utilisation, vous pouvez choisir soit toute la plage alphabétique, soit filtrer des domaines spécifiques.

L'expression régulière de this ressemblera à ceci:

^([a-zA-Z0-9_.]+)@([a-zA-Z0-9-]+)\.([a-zA-Z]{2,4})$

Ici, le début et la fin du modèle sont également déclarés, le domaine de premier niveau ne peut contenir que 2 à 4 caractères. L'expression entière a 3 groupes.

2. Filtrage des dates :

Les informations textuelles que vous extrayez peuvent contenir les dates et aucune colonne séparée n'est mise à votre disposition. Les dates sont un facteur essentiel qui aide au filtrage des données ou à l'analyse des séries chronologiques. Une date particulière prend le format date/mois/année, où la date et le mois peuvent être échangés.

En outre, les mois peuvent être numériques ainsi que sous forme d'alphabets et dans les alphabets, soit des abréviations, soit des noms complets. Cela dépend principalement du nombre de cas présents dans nos données et ne peut être atteint que par coup sûr et essai.

Un RegEx simple qui couvre une variété de dates est illustré ci-dessous :

^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$

Ce modèle capture le format de date avec un trait d'union ou une barre oblique. La date et le mois sont limités à un ou deux chiffres et l'année jusqu'à quatre0 chiffres. Les entités respectives sont capturées en tant que groupes qui sont facultatifs dans ce cas.

Lisez aussi: Idées et sujets de projet Python

Comment l'implémenter en Python ?

Les expressions régulières que nous venons de créer satisfont aux critères respectifs que nous avons supposés et il est maintenant temps de les implémenter dans le code Python. Python a un module intégré appelé re module qui implémente le fonctionnement de ces expressions. Simplement,

importer re

motif = '^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$'

Le module Re offre un large éventail de fonctions et toutes ont des cas d'utilisation différents. Regardons quelques-unes des fonctions importantes :

  1. re.findall() : cette fonction renvoie la liste de toutes les correspondances dans la chaîne de test en fonction du modèle passé. Considérez cet exemple :

string = '25-12-1999 texte aléatoire ici 25/12/1999'

print(re.findall(pattern, string))

Il renverra uniquement les dates de la chaîne dans une liste.

  1. re.sub() : Sub dans cette fonction signifie substitution et fait la même chose. Il remplace les correspondances par la valeur de remplacement fournie. La fonction prend le modèle, la chaîne, la valeur de remplacement et le paramètre facultatif du nombre. Le paramètre count contrôle le nombre d'occurrences que vous souhaitez remplacer. Par défaut, il les remplace tous et renvoie la nouvelle chaîne.
  2. re.split() : il divise la chaîne sur les sites correspondants et renvoie les parties sous forme de chaînes distinctes dans une liste.
  3. re.search() : cette fonction renvoie l'objet match qui contient la correspondance trouvée dans la chaîne ainsi que tous les groupes qu'il a capturés. Cela peut être utile lorsque vous souhaitez stocker ces groupes dans des colonnes séparées.

Pour effectuer ceci :

match = re.search(modèle, chaîne)

match.group(1)

Group(0) renvoie la correspondance entière et les numéros suivants correspondants désignent d'autres groupes.

Paiement : salaire d'un développeur Python en Inde

Conclusion

Les expressions régulières sont un moyen puissant de capturer des modèles dans des données textuelles. Cela peut demander un peu d'effort supplémentaire pour contrôler les différents caractères, mais cela simplifie le processus d'extraction des données dans les cas d'utilisation complexes.

Donnez quelques exemples d'expressions régulières en Python.

Les exemples suivants illustrent le fonctionnement des expressions régulières en Python :
une. Filtrage des e-mails
Les expressions régulières peuvent être utilisées efficacement pour filtrer les e-mails. La syntaxe standard pour le filtrage des e-mails est - ^((a-zA-Z0-9_.)+)@((a-zA-Z0-9-)+).((a-zA-Z){2,4} )$
Cette expression est divisée en trois groupes et s'attaque à de nombreux cas, y compris - lorsque le nom d'utilisateur est alphanumérique et lorsqu'il comporte un point, par exemple "first.last@". Cette expression sera utilisée pour les domaines supérieurs contenant 2 à 4 caractères.
b. Filtrage des dates
Les dates peuvent être un facteur crucial lors de la gestion du filtrage des données. Les données textuelles que vous traitez contiennent souvent des dates. L'expression régulière ou RegEx qui extrait les données d'un texte normal est - ^(d{1,2})(/-)(d{1,2})(/-)(d{2,4})$
La date et le mois peuvent comporter jusqu'à 2 chiffres tandis que le mois peut comporter jusqu'à 4 chiffres.

Quelles sont les fonctions impliquées dans l'implémentation des expressions régulières en Python ?

Les fonctions suivantes sont impliquées dans l'implémentation des expressions régulières en Python :
1. re.findall() - Cette fonction accepte un modèle qui doit être mis en correspondance avec la chaîne de texte. Il renvoie les chaînes qui correspondent.
2. re.sub() - Sub dans "re.sub" signifie "substitution". Cette méthode exécute exactement la même fonction que la fonction "re.findall()".
3. re.split() - Il sépare les chaînes autour du séparateur qui doit lui être passé en tant que paramètre. Le séparateur peut être n'importe quoi.
4. re.search() - Cette fonction renvoie la correspondance trouvée dans la chaîne avec d'autres groupes de chaînes qu'elle a capturés.

Quelles sont les séquences spéciales utilisées dans les expressions régulières ?

Voici quelques-unes des séquences spéciales utilisées dans les expressions régulières :
1. A : Vérifiez si la chaîne commence par le caractère donné.
2. (Barre oblique) b : Vérifie si la chaîne commence ou se termine par le caractère donné. (chaîne)/b vérifie le début tandis que (barre oblique inversée) b (chaîne) vérifie la fin.
3. B : C'est exactement l'opposé du b. Vérifie si la chaîne ne commence pas par le caractère donné.
4. d : Vérifie les valeurs numériques dans la chaîne.
5. D : Vérifie toute valeur ou caractère non numérique.
6. s : recherche tout caractère d'espacement.
7. S : recherche tout caractère autre qu'un espace blanc.
8. w : recherche tout caractère alphanumérique.
9. W : recherche tout caractère non alphanumérique.