Expressions régulières en Python

Vous êtes-vous déjà demandé quelle était la solution? découverte du texte dans un document, ou en s'assurant qu'un texte conforme vers un format, comme une adresse email par exemple, et d'autres opérations similaires?

La clé de telles opérations est l’expression régulière (regex). Voyons quelques définitions pour les expressions régulières. Dans Wikipedia, l'expression rationnelle est définie comme suit:

Une séquence de caractères qui définit un modèle de recherche, principalement à utiliser dans la correspondance de modèles avec des chaînes, ou la correspondance de chaînes, c’est-à-dire les opérations de type "trouver et remplacer". Le concept est apparu dans les années 1950, lorsque le mathématicien américain Stephen Kleene a formalisé la description d'un langage courant et est devenu communément utilisé avec les utilitaires de traitement de texte Unix, ed, un éditeur et grep, un filtre..

Une autre belle définition de regular-expressions.info est:

Une expression régulière (regex ou regexp en abrégé) est une chaîne de texte spéciale décrivant un modèle de recherche. Vous pouvez considérer les expressions régulières comme des caractères génériques sur des stéroïdes. Vous êtes probablement familiarisé avec les notations génériques telles que * .txt pour rechercher tous les fichiers texte dans un gestionnaire de fichiers. L'équivalent regex est. * \. Txt $

Je sais que le concept d'expressions régulières peut encore sembler un peu vague. Alors, regardons quelques exemples de regex pour mieux comprendre le concept.

Exemples d'expressions régulières

Dans cette section, je vais vous montrer quelques exemples de regex pour vous aider à comprendre davantage le concept..

Dites que vous avez eu cette regex:

/ abder /

Cela nous dit simplement de faire correspondre le mot abder seulement.

Qu'en est-il de cette regex?

/ a [nr] t /

Vous pouvez lire cette regex comme suit: trouvez un modèle de texte tel que la première lettre soit une et la dernière lettre est t, et entre ces lettres vient soit n ou r. Donc, les mots correspondants sont fourmi et art.

Laissez-moi vous donner un petit quiz à ce stade. Comment écririez-vous une expression régulière commençant par Californie, et se termine par un ou tous les caractères suivants tbr? Oui, cette expression régulière peut être écrite comme suit:

/ ca [tbr] /

Si vous voyez une regex qui commence par un accent circonflexe ^, cela signifie que la chaîne qui commence par la chaîne mentionnée après ^. Donc, si vous avez la regex ci-dessous, il correspond à la chaîne qui commence par Ce.

/ ^ Ceci /

Ainsi, dans la chaîne suivante:

Mon nom est Abder c'est Abder c'est Tom

Basé sur la regex / ^ Ceci /, les chaînes suivantes seront appariées:

C'est Abder C'est Tom

Et si nous voulions faire correspondre une chaîne qui prend fin avec de la ficelle? Dans ce cas, nous utilisons le signe dollar $. Voici un exemple:

Abder $

Ainsi, dans la chaîne ci-dessus (les trois lignes), les modèles suivants seront mis en correspondance à l'aide de cette expression rationnelle:

Mon nom est Abder C'est Abder

Eh bien, que pensez-vous de cette regex?

^ [A-Z] [a-z]

Je sais que cela peut paraître complexe au premier abord, mais examinons-le un par un..

Nous avons déjà vu quel accent circonflexe ^ est. Cela signifie faire correspondre une chaîne qui commence par une chaîne. [A à Z] fait référence aux lettres majuscules. Donc, si nous lisons cette partie de la regex: ^ [A-Z], il nous dit de faire correspondre la chaîne qui commence par une lettre majuscule. La dernière partie, [a-z], signifie qu'après avoir trouvé une chaîne commençant par une lettre majuscule, celle-ci sera suivie de lettres minuscules de l'alphabet.

Alors, laquelle des chaînes suivantes sera mise en correspondance avec cette expression rationnelle? Si vous n'êtes pas sûr, vous pouvez utiliser Python comme nous le verrons dans la section suivante pour tester votre réponse..

Abder Abder ABDER ABder

Les expressions régulières sont un sujet très vaste, et ces exemples ont pour seul but de vous donner une idée de ce qu’ils sont et de la raison pour laquelle nous les utilisons.. 

RexEgg est une bonne référence pour en savoir plus sur les expressions régulières et pour voir plus d'exemples..

Expressions régulières en Python

Venons maintenant à la partie amusante. Nous voulons voir comment utiliser certaines des expressions régulières ci-dessus en Python. Le module que nous allons utiliser pour travailler avec des expressions régulières en Python est le module.

Le premier exemple concernait la recherche du mot abder. En Python, nous ferions ceci comme suit:

import re text = 'Mon nom est Abder' match_pattern = re.match (r'Abder ', text) print match_pattern

Si vous exécutez le script Python ci-dessus, vous obtiendrez le résultat: Aucun!

Le script fonctionne très bien, mais le problème est de savoir comment la fonction rencontre() travaux. Si on retourne au documentation du module, c’est ce que la fonction rencontre() Est-ce que:

Si zéro ou plusieurs caractères au début de la chaîne correspondent au modèle d'expression régulière, renvoyez un objet correspondant. Renvoie Aucun si la chaîne ne correspond pas au modèle. notez que ceci est différent d'une correspondance de longueur nulle.

Aha, on peut voir que rencontre() ne renverra un résultat que s'il a trouvé une correspondance au début de la ficelle.

Nous pouvons plutôt utiliser la fonction chercher(), qui est basé sur la documentation:

Parcourez la chaîne en recherchant le premier emplacement où le modèle d'expression régulière produit une correspondance et renvoyez un objet correspondant. Renvoie None si aucune position dans la chaîne ne correspond au motif; notez que ceci est différent de la recherche d'une correspondance de longueur nulle à un moment donné de la chaîne.

Donc, si nous écrivons le script ci-dessus, mais avec chercher() au lieu de rencontre(), nous obtenons la sortie suivante:

<_sre.SRE_Match object at 0x101cfc988>

C'est un match match a été retourné.

Si nous voulons renvoyer le résultat (correspondance de chaîne), nous utilisons le groupe() une fonction. Si nous voulons voir le match entier, nous utilisons groupe (0). Ainsi:

print match_pattern.group (0)

retournera la sortie: Abder.

Si nous prenons la deuxième expression rationnelle dans la section précédente, c'est / a [nr] t /, il peut être écrit en Python comme suit:

import re text = 'Ceci est une fourmi noire' match_pattern = re.search (r'a [nr] t ', texte) print match_pattern.group (0)

La sortie de ce script est: fourmi.

Conclusion

L'article s'allonge et le sujet des expressions rationnelles en Python nécessite certainement plus d'un article, si ce n'est un livre en soi.. 

Cet article a toutefois pour but de vous donner un départ rapide et une grande confiance pour entrer dans le monde des expressions régulières en Python. Vous pouvez vous référer au  documentation pour en savoir plus sur ce module et comment approfondir le sujet.