Documentation du module Re pour Python 3 dans . Re module pour les expressions régulières

Les expressions régulières sont un composant très populaire de presque tous les langages de programmation. Ils vous aident à accéder rapidement aux informations dont vous avez besoin. En particulier, ils sont utilisés lorsqu'il est nécessaire de traiter du texte. Python est livré avec un module spécial par défaut. re, qui est responsable du travail avec les expressions régulières.

Aujourd'hui, nous allons parler en détail de ce que c'est en général, comment travailler avec eux et comment le module re aidera.

Expressions régulières : une introduction

A quoi servent les expressions régulières ? Presque toutes. Par exemple, ceux-ci :

  1. Applications Web nécessitant une validation de texte. Un exemple typique est celui des clients de messagerie en ligne.
  2. Tout autre projet lié aux textes, aux bases de données, etc.

Avant de commencer à analyser la syntaxe, nous devons comprendre plus en détail les principes de base du fonctionnement de la bibliothèque re et en général, ce qui est généralement bon à ce sujet. Nous donnerons également des exemples tirés de la pratique réelle, où nous décrirons le mécanisme de leur utilisation. Vous pouvez créer un tel modèle, adapté pour effectuer une grande variété d'opérations avec du texte.

Qu'est-ce qu'un modèle dans la bibliothèque Re ?

Avec lui, vous pouvez rechercher des informations de différents types, obtenir des informations leur correspondant, afin de rendre d'autres fonctions plus adaptatives. Et, bien sûr, de traiter ces données.

Par exemple, prenez le modèle suivant : s+. Cela signifie n'importe quel caractère d'espace. Si vous y ajoutez un signe plus, cela signifie que le motif comprend plus d'un espace. Il peut même correspondre aux caractères de tabulation appelés avec t+.

Avant de les utiliser, vous devez importer la bibliothèque Re. Après cela, nous utilisons une commande spéciale pour compiler le modèle. C'est fait en deux étapes.

>>> importer re

>>> regex = re.compile('s+')

Plus précisément, ce code effectue l'opération de compilation d'un modèle qui peut être utilisé. par exemple, pour rechercher des espaces (un ou plusieurs).

Obtenir des informations distinctes à partir de différentes chaînes à l'aide d'expressions régulières

Supposons que nous ayons une variable contenant les informations suivantes.

>>> text = """100 INF Informatique

213 MAT Mathématiques  

156 FRA Français»»»

Il contient trois formations. Chacun d'eux se compose de trois parties - numéro, code et nom. On voit que l'intervalle entre ces mots est différent. Que faire pour diviser cette ligne en chiffres et en mots séparés ? Il existe deux méthodes pour atteindre cet objectif :

  1. appeler une fonction re.séparer.
  2. appliquer la fonction scission en regex.

Voici un exemple d'utilisation de la syntaxe de chacune des méthodes pour notre variable.

>>> re.split('s+', texte)  

# ou

>>> regex.split(texte)

Sortie : ['100', 'INF', 'Informatique', '213', 'MAT', 'Math', '156', 'ENG', 'English']

En général, les deux méthodes peuvent être utilisées. Mais il est en fait beaucoup plus facile d'utiliser une expression régulière au lieu d'utiliser la fonction plusieurs fois. re.séparer.

Trouver des correspondances avec trois fonctions

Disons que nous devons extraire uniquement des nombres d'une chaîne. Que faut-il faire pour cela ?

re.findall()

Voici un cas d'utilisation de la fonction Trouver tout(), qui, avec les expressions régulières, vous permet d'extraire les occurrences d'un ou plusieurs nombres d'une variable de texte.

>>> imprimer (texte)  

100 INF Informatique

213 MAT Mathématiques  

156 FRA Anglais

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(texte)  

['100', '213', '156']

Avec le symbole d, nous avons utilisé un modèle qui indique absolument toute valeur numérique située dans une variable ou un texte. Et puisque nous y avons ajouté un +, cela signifie qu'au moins un numéro doit être présent. 

Vous pouvez également utiliser le signe * pour spécifier que la présence d'un chiffre n'est pas nécessaire pour qu'une correspondance soit trouvée.

Mais dans notre cas, puisque nous avons utilisé +, nous avons extrait avec Trouver tout() 1 ou plusieurs désignations numériques de cours à partir du texte. Ainsi, dans notre cas, les expressions régulières agissent comme des paramètres pour la fonction.

re.search() vs re.match()

Comme vous pouvez le deviner d'après le nom des fonctions, la première recherche une correspondance dans le texte. Question : Quelle est la différence entre Trouver tout? Le fait est qu'elle renvoie un objet spécifique qui correspond au modèle, et non la séquence entière des résultats trouvés sous la forme d'une liste, comme la fonction précédente.

À son tour, la fonction re.match fait de même. Seule la syntaxe est différente. Le modèle doit être placé au début. 

Prenons un exemple qui le démontre.

>>> # créer une variable avec du texte

>>> text2 = «»»INF Informatique

213 MAT Mathématiques 156″»»  

>>> # compiler regex et rechercher des modèles

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> print('Premier index : ', s.start())  

>>> print('Dernier index : ', s.end())  

>>> print(text2[s.start():s.end()]) 

Premier indice : 17 

Dernier indice : 20

213

Si vous voulez obtenir un résultat similaire d'une manière différente, vous pouvez utiliser la fonction grouper().

Remplacer une partie du texte par la bibliothèque Re

Pour remplacer du texte, utilisez la fonction re.sub(). Supposons que notre liste de cours ait un peu changé. Nous voyons qu'après chaque valeur numérique, nous avons un onglet. Notre tâche est de combiner toute cette séquence en une seule ligne. Pour cela, il faut remplacer l'expression s+ pour passer 

Le texte original était :

# créer une variable avec du texte

>>> text = “””100 INF t Informatique

213 MAT t Mathématiques  

156 FRA t Français»»»  

>>> imprimer (texte)  

100 XNUMX XNUMX INFO Informatique

213 TAPIS L'univers social  

156 AN Anglais

Pour effectuer l'opération souhaitée, nous avons utilisé les lignes de code suivantes.

# remplacer un ou plusieurs espaces par 1

>>> regex = re.compile('s+')  

>>> impression(regex.sub(' ', texte))  

En conséquence, nous avons une ligne. 

101 COM Informatique 205 MAT Mathématiques 189 ENG Anglais

Considérons maintenant un autre problème. Nous ne sommes pas confrontés à la tâche de mettre des espaces. Il est beaucoup plus important pour nous que tous les noms de cours commencent sur une nouvelle ligne. Pour ce faire, une autre expression est utilisée qui ajoute une nouvelle ligne à l'exception. Quel genre d'expression est-ce?

Bibliothèque Re prend en charge une fonctionnalité telle que la correspondance négative. Il diffère du direct en ce qu'il contient un point d'exclamation avant la barre oblique. Autrement dit, si nous devons ignorer le caractère de nouvelle ligne, nous devons écrire !n au lieu de n.

Nous obtenons le code suivant.

# supprimer tous les espaces sauf la nouvelle ligne  

>>> regex = re.compile('((?!n)s+)')  

>>> impression(regex.sub(' ', texte))  

100 INF Informatique

213 MAT Mathématiques  

156 FRA Anglais

Que sont les groupes d'expressions régulières ?

À l'aide de groupes d'expressions régulières, nous pouvons obtenir les objets souhaités sous la forme d'éléments séparés et non sur une seule ligne. 

Supposons que nous ayons besoin d'obtenir le numéro, le code et le nom du cours non pas sur une seule ligne, mais sous forme d'éléments séparés. Pour terminer la tâche, vous devrez écrire un grand nombre de lignes de code inutiles. 

En fait, la tâche peut être grandement simplifiée. Vous pouvez compiler le modèle pour toutes les entrées et spécifier simplement les données que vous devez obtenir des parenthèses.

Il y aura un très petit nombre de lignes. 

# créer des groupes de modèles de texte de cours et les extraire

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(course_pattern, texte)  

[('100', 'INF', 'Informatique'), ('213', 'MAT', 'Mathématiques'), ('156', 'ENG', 'Anglais')]

Le concept d'appariement "gourmand"

En standard, les expressions régulières sont programmées pour extraire le maximum de données correspondantes. Et même si vous avez besoin de beaucoup moins.

Regardons un exemple de code HTML où nous devons obtenir la balise.

>>> text = "Exemple de correspondance d'expression régulière gourmande"  

>>> re.findall('', texte)  

['Exemple de correspondance d'expression régulière gourmande']

Au lieu d'extraire une seule balise, Python a obtenu la chaîne entière. C'est pourquoi on l'appelle gourmand.

Et que faire pour n'avoir que le tag ? Dans ce cas, vous devez utiliser la correspondance paresseuse. Pour spécifier une telle expression, un point d'interrogation est ajouté à la fin du motif.

Vous obtiendrez le code suivant et la sortie de l'interpréteur.

>>> re.findall('', texte)  

[", "]

S'il est nécessaire d'obtenir uniquement la première occurrence rencontrée, la méthode est utilisée chercher ().

re.search('', texte).group()  

»

Ensuite, seule la balise d'ouverture sera trouvée.

Modèles d'expression populaires

Voici un tableau contenant les modèles d'expressions régulières les plus couramment utilisés.

Documentation du module Re pour Python 3 dans . Re module pour les expressions régulières

Conclusion

Nous n'avons considéré que les méthodes les plus élémentaires pour travailler avec des expressions régulières. En tout cas, vous avez vu à quel point ils sont importants. Et ici, peu importe qu'il soit nécessaire d'analyser l'intégralité du texte ou ses fragments individuels, qu'il soit nécessaire d'analyser un message sur un réseau social ou de collecter des données afin de le traiter ultérieurement. Les expressions régulières sont une aide fiable dans ce domaine.

Ils vous permettent d'effectuer des tâches telles que :

  1. Spécifier le format des données, comme une adresse e-mail ou un numéro de téléphone.
  2. Obtenir une chaîne et la diviser en plusieurs chaînes plus petites.
  3. Effectuez diverses opérations avec du texte, telles que la recherche, l'extraction des informations nécessaires ou le remplacement d'une partie des caractères.

Les expressions régulières vous permettent également d'effectuer des opérations non triviales. A première vue, maîtriser cette science n'est pas facile. Mais en pratique, tout est standardisé, il suffit donc de le comprendre une fois, après quoi cet outil peut être utilisé non seulement en Python, mais également dans tout autre langage de programmation. Même Excel utilise des expressions régulières pour automatiser le traitement des données. C'est donc un péché de ne pas utiliser cet outil.

Soyez sympa! Laissez un commentaire