Tutoriel sur les expressions régulières Python | Tutoriel de Python Regex

Contenu

Pertinence des expressions régulières

Dans les années récentes, il y a eu un changement radical dans l'utilisation des langages de programmation à usage général pour la science des données et l'apprentissage automatique. Ce n'est pas toujours le cas: il y a une décennie, Cette pensée aurait rencontré de nombreux yeux sceptiques!

Cela signifie que plus de personnes / les institutions utilisent des outils comme Python / JavaScript pour résoudre vos besoins en données. C'est là que les expressions régulières deviennent super utiles. Les expressions régulières sont régulièrement le moyen par défaut de nettoyer et de contester les données dans la plupart de ces outils.. Soit l'extraction de parties spécifiques de texte à partir de pages Web, donner un sens aux données Twitter ou préparer vos données pour l'exploration de texte, regex est votre meilleur choix pour toutes ces tâches.

Compte tenu de son applicabilité, il est logique de les connaître et de les utiliser correctement.

Qu'allez-vous apprendre de ce post?

Dans ce billet, Je vais vous guider dans l'utilisation, exemples et applications d'expressions régulières. Les expressions régulières sont très appréciées des programmeurs et peuvent être appliquées dans de nombreux langages de programmation tels que Java, JS, php, C ++, etc. Pour développer notre compréhension, nous avons expliqué ce concept en utilisant le langage de programmation Python. Jusqu'à la fin, j'ai résolu divers problèmes en utilisant regex.

apprendre les expressions régulières en python

Commençons!

Qu'est-ce que l'expression régulière et comment est-elle utilisée?

Brièvement, l'expression régulière est une séquence de caractères qui sont principalement utilisés pour rechercher et remplacer des modèles dans une chaîne ou un fichier. Comme je l'ai mentionné auparavant, sont compatibles avec la plupart des langages de programmation comme python, perl, R, Java et bien d'autres. Ensuite, les apprendre aide de plusieurs manières (Plus à ce sujet plus tard).

Les expressions régulières utilisent deux types de caractères:

une) Métacaractères: comme le nom le suggère, ces caractères ont une signification particulière, équivalent à * dans le joker.

b) Littéraux (Comme, b, 1,2…)

Et Python, nous avons le module “Ce qui aide avec les expressions régulières. Ensuite, vous devez importer la bibliothèque avant de pouvoir utiliser des expressions régulières en Python.

Utilisez ce code --> Importer re

Les utilisations les plus courantes des expressions régulières sont:

  • Rechercher une chaîne (rechercher et faire correspondre)
  • Trouver une chaîne (Trouver tout)
  • Divisez la chaîne en une sous-chaîne (partager)
  • Remplacer une partie d'une chaîne (sous)

Voyons les méthodes que la bibliothèque “« Fournit pour effectuer ces tâches.

Noter: Nous avons également un cours vidéo sur le traitement du langage naturel qui couvre également les expressions régulières. Vérifie ça!

Quelles sont les différentes méthodes de regex?

Le paquet’ fournit diverses méthodes pour interroger une chaîne d'entrée. Voici les méthodes les plus utilisées, je vais discuter:

  1. revanche()
  2. enquêter()
  3. re.trouver ()
  4. re.séparer ()
  5. re.sub ()
  6. recompiler ()

Voyons-les un par un.

revanche(Modèle, corde):

Cette méthode trouve une correspondance si elle se produit au début de la chaîne. Par exemple, correspondance d'appel () en la cadena 'AV Analytics AV’ et recherchez un 'modèle AV’ correspondra. Malgré cela, si nous recherchons uniquement Analytics, le motif ne correspondra pas. Faisons-le en Python maintenant.

Voici une fenêtre d'encodage en direct pour vous aider à démarrer. Vous pouvez exécuter les codes et obtenir le résultat dans cette fenêtre:

Ci-dessus, vous pouvez voir la position de début et de fin du motif correspondant 'AV’ sur la corde et, parfois, aide beaucoup lors de la manipulation de la corde.

enquêter(Modèle, corde):

C'est équivalent à faire correspondre () mais cela ne nous limite pas à rechercher des correspondances uniquement au début de la chaîne. Contrairement à la méthode précédente, ici la recherche du 'modèle d'analyse’ retournera un match.

Code

résultat = .chercher(r'Analytique', 'AV DataPeaker AV')
imprimer résultat.grouper(0)
Sortir:
Analytique

Ici vous pouvez voir que la méthode de recherche () peut trouver un motif à partir de n'importe quelle position dans la chaîne, mais il ne renvoie que la première occurrence du motif de recherche.

re.trouverModèle, corde):

Ce aide à obtenir une liste de tous les modèles correspondants. Vous n'avez aucune restriction de recherche du début ou de la fin. Si nous utilisons la méthode findall pour rechercher 'AV’ dans une chaîne donnée, renverra les deux occurrences de AV. Lors de la recherche d'une chaîne, je vous recommande d'utiliser re.trouver () pour toujours, peut fonctionner comme re.search () y re.match () les deux.

Code

résultat = .Trouver tout(ambre', 'AV DataPeaker AV')
imprimer résultat

Sortir:
['DE', 'DE']

re.séparerModèle, corde, [maxsplit=0]):

Cette méthode permet de diviser corde par les occurrences de donné Modèle.

Code

résultat=.diviser(r'y','Analytique')
résultat

Sortir:
['Anal', 'tics']

Dessus, nous avons divisé la chaîne “Analytique” pour “Oui”. La méthode fractionnée () a un autre argument “maxsplit". A une valeur par défaut de zéro. Dans cette circonstance, il fait le maximum de divisions qui peuvent être faites, mais si nous donnons de la valeur à maxsplit, va diviser la chaîne. Voyons l'exemple suivant:

Code

résultat=.diviser(r'i','DataPeaker')
résultat d'impression

Sortir:
['Analyte', 'cs V', 'dhya'] #Il a effectué tous les fractionnements qui peuvent être effectués par motif "je".

Code

résultat=.diviser(r'i','DataPeaker',maxsplit=1)
résultat

Sortir:
['Analyte', 'cs Vidya']

Ici, vous pouvez voir que nous avons défini maxsplit dans 1. Et le résultat est qu'il n'a que deux valeurs, alors que le premier exemple a trois valeurs.

re.subModèle, répondeur, corde):

Aide à trouver un modèle et à le remplacer par une nouvelle sous-chaîne. Si le motif n'est pas trouvé, corde est retourné inchangé.

Code

résultat=.sous(« Inde »,'le monde',« AV est la plus grande communauté d'analyse d'Inde »)
résultat
Sortir:
« AV est la plus grande communauté d'analyse du monde »

recompilerModèle, répondeur, corde):

Nous pouvons combiner un motif regex dans des objets de motif, qui peut être utilisé pour faire correspondre les modèles. Il est également utile de rechercher à nouveau un motif sans le retaper..

Code

importer modèle=.compiler('DE')
résultat=modèle.Trouver tout('AV DataPeaker AV')
imprimer résultat
résultat2=modèle.Trouver tout(« AV est la plus grande communauté d'analyse d'Inde »)
imprimer résultat2
Sortir:
['DE', 'DE']
['DE']

Résumé rapide des différentes méthodes:

Jusqu'au moment, nous analysons diverses méthodes regex en utilisant un modèle constant (caractères fixes). Mais, Que se passe-t-il si nous n'avons pas de modèle de recherche constant et que nous voulons renvoyer un ensemble spécifique de caractères (défini par une règle) d'une chaîne? Ne soyez pas intimidé.

Cela peut être facilement résolu en définissant une expression à l'aide d'opérateurs de modèle (caractères méta et littéraux). Regardons les opérateurs de modèle les plus courants.

Quels sont les opérateurs les plus utilisés?

Les expressions régulières peuvent spécifier des modèles, pas seulement des caractères fixes. Ce sont les opérateurs les plus utilisés qui aident à générer une expression pour représenter les caractères requis dans une chaîne ou un fichier. Couramment utilisé dans le web scrapping et le text mining pour extraire les informations requises.

Les opérateurs La description
. Correspond à n'importe quel caractère sauf la nouvelle ligne ‘ n'.
? d'accord avec 0 O 1 apparition du motif sur votre gauche
+ 1 ou plusieurs occurrences du motif à votre gauche
* 0 ou plusieurs apparitions du motif à votre gauche
w Correspond à un caractère alphanumérique tandis que W (W mayúscula) correspond à un caractère non alphanumérique.
Correspondances de chiffres [0-9] Oui / ré (D mayúscula) ne correspond à aucun chiffre.
s Correspond à un seul caractère d'espacement (espace, nouvelle ligne, revenir, tabulation, former) y S (S mayúscula) correspond à n'importe quel caractère non blanc.
B frontière entre mot et non-mot et / B est opposé / b
[..] Correspond à n'importe quel caractère entre parenthèses et [^..] correspond à n'importe quel caractère qui n'est pas entre parenthèses
Utilisé pour les caractères de signification spéciale comme . coïncider avec un point ou + pour le signe plus.
^ et $ ^ et $ correspondre au début ou à la fin de la chaîne respectivement
{Nouveau Mexique} Elle correspond à au moins n et au plus m occurrences de l'expression précédente si on l'écrit sous la forme {, m} alors il renverra au moins toute occurrence minimale au maximum m expression précédente.
une | B Correspond à a ou b
() Regrouper les expressions régulières et renvoyer le texte correspondant
t, m, r Onglet Matchs, nouvelle ligne, revenir

Pour plus de détails sur les métacaractères “(“, “)”, “|” et autres détails, tu peux vérifier ce lien (https://docs.python.org/2/library/re.html).

À présent, Comprenons les opérateurs de modèle en regardant les exemples suivants.

Quelques exemples d'expressions régulières

Problème 1: Renvoie le premier mot d'une chaîne donnée

Solution-1 Extraire chaque caractère (en utilisant “ w)

Code

importer résultat=.Trouver tout(r'.',« AV est la plus grande communauté d'analyse d'Inde »)
imprimer résultat

Sortir:
['UNE', 'V', ' ', 'je', 's', ' ', 'l', 'une', 'r', 'g', 'e', 's', 't', ' ', 'UNE', 'n', 'une', 'l', 'et', 't', 'je', 'c', 's', ' ', 'c', 'O', 'm', 'm', 'tu', 'n', 'je', 't', 'et', ' ', 'O', 'F', ' ', 'JE', 'n', 'ré', 'je', 'une']

Ci-dessus extrait également l'espace, maintenant pour l'empêcher d'être utilisé “ w” au lieu de “.".

Code

résultat=.Trouver tout(r'w',« AV est la plus grande communauté d'analyse d'Inde »)
imprimer résultat

Sortir:
['UNE', 'V', 'je', 's', 'l', 'une', 'r', 'g', 'e', 's', 't', 'UNE', 'n', 'une', 'l', 'et', 't', 'je', 'c', 's', 'c', 'O', 'm', 'm', 'tu', 'n', 'je', 't', 'et', 'O', 'F', 'JE', 'n', 'ré', 'je', 'une']

Solution-2 Extraire chaque mot (en utilisant “*” O “+)

Code

résultat=.Trouver tout(r'w*',« AV est la plus grande communauté d'analyse d'Inde »)
imprimer résultat

Sortir:
['DE', '', 'est', '', 'le plus grand', '', 'Analytique', '', 'communauté', '', 'de', '', 'Inde', '']

Une fois de plus, renvoie l'espace sous forme de mot car “*"Renvoie zéro ou plusieurs correspondances de motif à sa gauche. À présent, effacer les espaces, nous irons avec “+".

Code

résultat=.Trouver tout(r'w+',« AV est la plus grande communauté d'analyse d'Inde »)
imprimer résultat
Sortir:
['DE', 'est', 'le plus grand', 'Analytique', 'communauté', 'de', 'Inde']

Solution-3 Extraire chaque mot (en utilisant “^)

Code

résultat=.Trouver tout(r'^w+',« AV est la plus grande communauté d'analyse d'Inde »)
imprimer résultat

Sortir:
['DE']

Si nous utilisons "$" au lieu de "^", renverra le mot de la fin de la chaîne. Veámoslo.

Code

résultat=.Trouver tout(r'w+$',« AV est la plus grande communauté d'analyse d'Inde »)
imprimer résultat
Sortir:

['Inde']

Problème 2: Renvoie les deux premiers caractères de chaque mot

Solution-1 Extraire deux caractères consécutifs de chaque mot, à l'exclusion des espaces (en utilisant “ w)

Code

result=re.findall(r'ww',« AV est la plus grande communauté d'analyse d'Inde »)
résultat d'impression

Sortir:
['DE', 'est', 'la', 'rg', 'il est', 'Un', 'Al', 'yt', 'ic', 'co', 'mm', 'un', 'ce', 'de', 'Dans', 'de']

Solution-2 Extraire deux caractères consécutifs de ceux disponibles au début de la limite du mot (en utilisant “B)

résultat=.Trouver tout(r'bw.',« AV est la plus grande communauté d'analyse d'Inde »)
imprimer résultat

Sortir:
['DE', 'est', 'la', 'Un', 'co', 'de', 'Dans']

Problème 3: Renvoie le type de domaine des identifiants de messagerie donnés

Pour l'expliquer simplement, Je recommencerai avec une approche étape par étape:

Solution-1 Extraire tous les caractères après “@”

Code

résultat=.Trouver tout(r'@w+','[email protégé], [email protégé], [email protégé], [email protégé]') 
imprimer résultat 
Sortir: ['@Gmail', '@test', '@analyticsvidhya', '@du repos']

Dessus, vous pouvez voir que la partie “.avec”, “.dans” il n'est pas extrait. Pour l'ajouter, nous irons avec le code suivant.

result=re.findall(r'@w+.w+','[email protégé], [email protégé], [email protégé], [email protégé]')
résultat d'impression
Sortir:
['@gmail.com', '@test.in', '@analyticsvidhya.com', '@rest.biz']

Solution – 2 Extraire uniquement le nom de domaine en utilisant “()”

Code

result=re.findall(r'@w+.(w+)','[email protégé], [email protégé], [email protégé], [email protégé]')
résultat d'impression
Sortir:
['avec', 'dans', 'avec', 'biz']

Problème 4: date de retour de la chaîne donnée

Ici, nous utiliserons “”Pour extraire le chiffre.

Solution:

Code

result=re.findall(r'd{2}-ré{2}-ré{4}','Amit 34-3456 12-05-2007, XYZ 56-4532 11-11-2011, abc 67-8945 12-01-2009')
résultat d'impression
Sortir:
['12-05-2007', '11-11-2011', '12-01-2009']

Si vous voulez extraire seulement un an, la parenthèse "()" cela vous aidera.

Code


résultat=.Trouver tout(r'd{2}-ré{2}-(ré{4})','Amit 34-3456 12-05-2007, XYZ 56-4532 11-11-2011, abc 67-8945 12-01-2009')
imprimer résultat
Sortir:
['2007', '2011', '2009']

Problème 5: Renvoie tous les mots d'une chaîne commençant par une voyelle

Solution-1 Renvoie chaque mot

Code

résultat=.Trouver tout(r'w+',« AV est la plus grande communauté d'analyse d'Inde »)
imprimer résultat

Sortir:
['DE', 'est', 'le plus grand', 'Analytique', 'communauté', 'de', 'Inde']

Solution-2 Les mots de retour commencent par des alphabets (en utilisant [])

Code

résultat=.Trouver tout(r'[aeiouAEIOU]w+',« AV est la plus grande communauté d'analyse d'Inde »)
imprimer résultat

Sortir:
['DE', 'est', 'plus grand', 'Analytique', 'communauté', 'de', 'Inde']

Ci-dessus, vous pouvez voir qu'il est revenu “le plus grand” Oui “communauté” du milieu des mots. Pour effacer ces deux, nous devons utiliser ” b” pour la limite du mot.

Solution 3

Code

résultat=.Trouver tout(r'b[aeiouAEIOU]w+',« AV est la plus grande communauté d'analyse d'Inde »)
imprimer résultat 

Sortir:
['DE', 'est', 'Analytique', 'de', 'Inde']

Équivalent, nous pouvons extraire les mots qui commencent par constant en utilisant "^" entre parenthèses.

Code

résultat=.Trouver tout(r'b[^ aeiouAEIOU]w+',« AV est la plus grande communauté d'analyse d'Inde »)
imprimer résultat

Sortir:
[' est', 'le plus grand', 'Analytique', ' communauté', ' de', ' Inde']

Ci-dessus, vous pouvez voir que vous avez renvoyé des mots commençant par un espace. Pour le supprimer de la sortie, inclure un espace entre parenthèses[].

Code

résultat=.Trouver tout(r'b[^ aeiouAEIOU ]w+',« AV est la plus grande communauté d'analyse d'Inde »)
imprimer résultat

Sortir:
['le plus grand', 'communauté']


Problème 6: valider un numéro de téléphone (le numéro de téléphone doit avoir 10 chiffres et commencer par 8 O 9)

Nous avons une liste de numéros de téléphone sur la liste “au” et ici nous validerons les numéros de téléphone en utilisant

Solution

Code

importation re
li=['99999999999','999999-999','99999x9999']
pour val en li:
 si re.match(r'[8-9]{1}[0-9]{9}',val) et len(val) == 10:
     imprimer 'oui'
 autre:
     imprimer 'non'
Sortir:
Oui
non
non

Problème 7: diviser une chaîne avec plusieurs délimiteurs

Solution

Code

importer ligne = 'asdf fjdk;nourri,fjek,asdf,foo' # La chaîne a plusieurs délimiteurs (";",","," ").
résultat= .diviser(r'[;,s]', ligne)
imprimer résultat

Sortir:
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']

On peut aussi utiliser la méthode re.sub () pour remplacer ces délimiteurs multiples par un comme espace "".

Code

importer ligne = 'asdf fjdk;nourri,fjek,asdf,foo'
résultat= .sous(r'[;,s]',' ', ligne)
imprimer résultat

Sortir:
asdf fjdk afed fjek asdf foo

Problème 8: récupérer des informations à partir d'un fichier HTML

Je veux extraire des informations d'un fichier HTML (voir des exemples de données ci-dessous). Ici, nous devons extraire les informations disponibles entre

Oui

sauf le premier index numérique. J'ai supposé ici que le code html ci-dessous est stocké dans une chaîne str.

exemple de fichier HTML (str)

<tr aligner="centre"><td>1</td> <td>Noé</td> <td>Emma</td></tr>
<tr aligner="centre"><td>2</td> <td>Liam</td> <td>Olivier</td></tr>
<tr aligner="centre"><td>3</td> <td>le maçon</td> <td>Sophie</td></tr>
<tr aligner="centre"><td>4</td> <td>Jacob</td> <td>Isabelle</td></tr>
<tr aligner="centre"><td>5</td> <td>William</td> <td>Ava</td></tr>
<tr aligner="centre"><td>6</td> <td>Ethan</td> <td>Mon</td></tr>
<tr aligner="centre"><td>7</td> <td HTML>Michael</td> <td>Emilie</td></tr>

Solution:

Code

result=re.findall(r'<td>w+</td>s<td>(w+)</td>s<td>(w+)</td>',str)
résultat d'impression
Sortir:
[('Noé', 'Emma'), ('Liam', 'Olivie'), ('Le maçon', 'Sophie'), ('Jacob', 'Isabelle'), ('William', 'Ava'), ('Ethan', 'Mon'), ('Michael', 'Emilie')]

Vous pouvez lire le fichier html en utilisant la bibliothèque urllib2 (voir code ci-dessous).

Code

importer urllib2
réponse = urllib2.urlopen('')
html = réponse.lire()

Remarques finales

Dans ce billet, nous avons discuté de l'expression régulière, les méthodes et les métacaractères pour former une expression régulière. Nous avons également analysé plusieurs exemples pour en voir les utilisations pratiques.. Ici, j'ai essayé de vous présenter regex et de couvrir les méthodes les plus courantes pour résoudre les problèmes de regex maximum..

Le message a-t-il été utile? Faites-nous part de vos réflexions sur ce guide dans la section commentaires ci-dessous..

Si vous aimez ce que vous venez de lire et souhaitez continuer à apprendre sur l'analyse, abonnez-vous à nos e-mails, Suivez-nous sur Twitter ou comme le nôtre page le Facebook.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.