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.
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 “réCe qui aide avec les expressions régulières. Ensuite, vous devez importer la bibliothèque ré 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 “ré« 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:
- revanche()
- enquêter()
- re.trouver ()
- re.séparer ()
- re.sub ()
- 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 = ré.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 = ré.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=ré.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=ré.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=ré.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=ré.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 ré modèle=ré.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. |
ré | 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é résultat=ré.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=ré.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=ré.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=ré.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=ré.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=ré.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=ré.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=ré.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 “ré”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=ré.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=ré.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=ré.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=ré.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=ré.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=ré.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 ré ligne = 'asdf fjdk;nourri,fjek,asdf,foo' # La chaîne a plusieurs délimiteurs (";",","," "). résultat= ré.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 ré ligne = 'asdf fjdk;nourri,fjek,asdf,foo' résultat= ré.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
excepto el primer indiceLe "Indice" C’est un outil fondamental dans les livres et les documents, qui vous permet de localiser rapidement les informations souhaitées. Généralement, Il est présenté au début d’une œuvre et organise les contenus de manière hiérarchique, y compris les chapitres et les sections. Sa préparation correcte facilite la navigation et améliore la compréhension du matériau, ce qui en fait une ressource incontournable tant pour les étudiants que pour les professionnels dans divers domaines.... 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..