Maison >développement back-end >Tutoriel Python >Sept exemples d'utilisation d'expressions régulières Python

Sept exemples d'utilisation d'expressions régulières Python

怪我咯
怪我咯original
2017-04-07 10:46:111714parcourir

En tant que concept, les expressions régulières ne sont pas propres à Python. Cependant, il existe encore quelques différences mineures dans l’utilisation réelle des expressions régulières en Python.

Cet article fait partie d'une série d'articles sur les expressions régulières Python. Dans ce premier article de cette série, nous nous concentrerons sur la façon d'utiliser les expressions régulières en Python et mettrons en évidence certaines des fonctionnalités uniques de Python.

Nous présenterons quelques méthodes de recherche et de recherche de chaînes en Python. Nous verrons ensuite comment utiliser le regroupement pour traiter les sous-éléments des objets correspondants que nous trouvons.

Le module d'expressions régulières en Python que nous souhaitons utiliser est généralement appelé 're'.

1. Chaînes de type primitif en Python

Le compilateur Python utilise '' (barre oblique inverse) pour représenter les chaînes de caractères d'échappement dans les constantes. .

Si la barre oblique inverse est suivie d'une chaîne de caractères spéciaux reconnus par le compilateur, toute la séquence d'échappement sera remplacée par le caractère spécial correspondant (par exemple, 'n' sera remplacé par un caractère de nouvelle ligne par le compilateur) .

Mais cela pose un problème pour l'utilisation d'expressions régulières en Python, car les barres obliques inverses sont également utilisées dans le module 're' pour échapper aux caractères spéciaux dans les expressions régulières (tels que * et +) .

Un mélange des deux signifie que parfois vous devez échapper au caractère d'échappement lui-même (lorsque le caractère spécial est reconnu à la fois par Python et le compilateur d'expression régulière), mais d'autres fois, cela n'est pas nécessaire (si le les caractères spéciaux ne sont reconnus que par le compilateur Python).

Au lieu d'essayer de déterminer combien de barres obliques inverses sont nécessaires, nous pouvons utiliser des chaînes brutes à la place.

Les chaînes de type primitif peuvent être créées simplement en ajoutant un caractère « r » avant les guillemets doubles d'une chaîne ordinaire. Lorsqu'une chaîne est de type primitif, le compilateur Python ne tente aucune substitution. Essentiellement, vous dites au compilateur de ne pas interférer du tout avec votre chaîne.

Utiliser des expressions régulières pour rechercher en Python

Le module 're' fournit plusieurs méthodes pour les chaînes d'entrée Effectuer des recherches exactes. Les méthodes dont nous discuterons sont :



Chaque méthode accepte une expression régulière et une chaîne à faire correspondre. Examinons chacune de ces méthodes plus en détail pour comprendre comment elles fonctionnent et en quoi elles diffèrent.

2. Utilisez re.match pour rechercher – la correspondance commence

Jetons d'abord un coup d'œil à la méthode match(). La façon dont fonctionne la méthode match() est qu'elle ne trouve une correspondance que si le début de la chaîne recherchée correspond au modèle.

Par exemple, en appelant la méthode math() sur la chaîne 'dog cat dog', le modèle de recherche 'dog' correspondra :



Nous allons La méthode group() sera abordée plus en détail plus tard. Pour l'instant, nous avons juste besoin de savoir que nous l'avons appelé avec 0 comme argument et que la méthode group() renvoie le modèle correspondant trouvé.

J'ai également ignoré l'objet SRE_Match renvoyé pour l'instant, nous en discuterons bientôt.

Cependant, si nous appelons la méthode math() sur la même chaîne, en recherchant le motif 'cat', aucune correspondance ne sera trouvée.

3. Utilisez re.search pour trouver – faites correspondre n'importe quelle position

La méthode search() est similaire à match() , mais rechercher La méthode () ne nous limite pas à rechercher uniquement une correspondance à partir du début de la chaîne, donc rechercher 'cat' dans notre exemple de chaîne trouvera une correspondance :

Cependant, la méthode search() s'arrête lorsqu'elle trouve une correspondance, donc la recherche de 'dog' à l'aide de la méthode searc() dans notre exemple de chaîne ne trouvera que la première occurrence de celui-ci.


4. Utilisez re.findall – tous les objets correspondants

La méthode de recherche que j'utilise le plus en Python jusqu'à présent est la méthode findall(). Lorsque nous appelons la méthode findall(), nous pouvons simplement obtenir une liste de tous les modèles correspondants au lieu d'obtenir l'objet de correspondance (nous discuterons plus en détail de l'objet de correspondance ensuite). Pour moi c'est plus simple. En appelant la méthode findall() sur l'exemple de chaîne, nous obtenons :

Utilisez les méthodes match.start et match.end

Alors, quel est l'objet 'match' précédemment renvoyé par les méthodes search() et match()

?

Différent du simple renvoi de la partie correspondante de la chaîne, "l'objet correspondant" renvoyé par search() et match() est en fait une classe wrapper pour les sous-chaînes correspondantes.

Vous avez vu plus tôt que je pouvais obtenir la sous-chaîne correspondante en appelant la méthode group() (comme nous le verrons dans la section suivante, les objets match sont en fait très utiles lorsqu'il s'agit de problèmes de regroupement), mais la correspondance l'objet est toujours Contient plus d'informations sur les sous-chaînes correspondantes.

Par exemple, l'objet match peut nous indiquer où commence et se termine le contenu correspondant dans la chaîne d'origine :

Connaître cette information est parfois très utile.

6. Regroupez par nombres à l'aide de mathch.group

Comme je l'ai déjà mentionné, les objets de correspondance sont très pratiques pour gérer les regroupements.

Le regroupement est la possibilité de localiser des sous-chaînes spécifiques d'une expression régulière entière. Nous pouvons définir un groupe comme faisant partie de l’ensemble de l’expression régulière, puis localiser séparément le contenu correspondant de cette partie.

Voyons comment cela fonctionne :

La chaîne que je viens de créer ressemble à une chaîne extraite du carnet d'adresses de quelqu'un. Un fragment. On peut faire correspondre cette ligne avec une expression régulière :


en entourant l'expression régulière de parenthèses (les caractères '(' et ')') On peut regrouper le contenu en sections spécifiques, puis traitez ces sous-groupes individuellement.

Ces groupes peuvent être obtenus en utilisant la méthode group() de l'objet group. Ils peuvent être localisés par l'ordre numérique dans lequel ils apparaissent de gauche à droite dans l'expression régulière (en commençant par 1) :

La raison pour laquelle les nombres ordinaux des groupes commencent de 1 est dû au fait que le 0ème groupe est réservé pour stocker tous les objets correspondants (nous l'avons vu lorsque nous avons étudié la méthode match() et la méthode search() auparavant).

7. Utilisez match.group pour regrouper par alias

Parfois, surtout lorsqu'une expression régulière a plusieurs groupes, par groupe Positionnement basé sur l'ordre de l'apparence deviendra irréaliste. Python vous permet également de spécifier un nom de groupe via l'instruction suivante :

Nous pouvons toujours utiliser la méthode group() pour obtenir le contenu du groupe, mais cette fois nous devons utiliser ce que nous avons Spécifiez le nom du groupe au lieu du nombre de chiffres du groupe utilisé précédemment.

Cela améliore considérablement la clarté et la lisibilité du code. Vous pouvez imaginer qu’à mesure que les expressions régulières deviennent plus complexes, il devient de plus en plus difficile de comprendre ce qu’un groupe capture. Nommer vos groupes vous indiquera clairement, à vous et à vos lecteurs, votre intention.

Bien que la méthode findall() ne renvoie pas d'objet groupé, elle peut également utiliser le regroupement. De même, la méthode findall() renverra une collection de tuples, où le Nième élément de chaque tuple correspond au Nième groupement dans l'expression régulière.

Cependant, nommer le groupe ne s'applique pas à la méthode findall().

Dans cet article, nous avons présenté quelques bases de l'utilisation des expressions régulières en Python. Nous avons découvert le type de chaîne primitif (et comment il peut vous aider à résoudre certains des problèmes liés à l'utilisation d'expressions régulières). Nous avons également appris à utiliser les méthodes match(), search() et findall() pour effectuer des requêtes de base, et à utiliser le regroupement pour gérer les sous-composants des objets correspondants.

Comme toujours, si vous souhaitez en savoir plus sur ce sujet, la documentation officielle Python du module re est une excellente ressource.

Dans les prochains articles, nous discuterons plus en profondeur de l'application des expressions régulières en Python. Nous examinerons de manière plus complète les objets de correspondance, apprendrons comment les utiliser pour effectuer des substitutions dans des chaînes et même les utiliserons pour analyser les structures de données Python à partir de fichiers texte.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn