Maison > développement back-end > Tutoriel Python > Expressions régulières en Python

Expressions régulières en Python

WBOY
Libérer: 2023-08-27 10:05:21
original
1225 Les gens l'ont consulté

Expressions régulières en Python

Vous êtes-vous déjà demandé quelle est la clé pour trouver certain texte dans un document ou s'assurer que le texte correspond à un certain format (comme une adresse e-mail) et à d'autres opérations similaires ?

La clé de ce type d'opération réside dans les expressions régulières (regex). Examinons quelques définitions des expressions régulières. Dans Wikipédia, l'expression régulière est définie comme suit :

Une séquence de caractères qui définit un modèle de recherche, principalement utilisée pour la correspondance de modèles ou la correspondance de chaînes avec des chaînes, c'est-à-dire des opérations telles que "rechercher et remplacer". Le concept est apparu dans les années 1950, lorsque le mathématicien américain Stephen Kleene a formalisé la description des langages réguliers et est devenu couramment utilisé avec les utilitaires de traitement de texte Unix ed (éditeur) et grep (filtre).

Une autre bonne définition de

regular-expressions.info est :

Les expressions régulières (regex ou regexp en abrégé) sont des chaînes de texte spéciales utilisées pour décrire des modèles de recherche. Vous pouvez considérer les expressions régulières comme des caractères génériques sous stéroïdes. Vous connaissez peut-être la notation générique, telle que *.txt, pour rechercher tous les fichiers texte dans votre gestionnaire de fichiers. L'équivalent de l'expression régulière est .*.txt$

Je sais que le concept d'expressions régulières peut encore paraître un peu vague. Examinons donc quelques exemples d’expressions régulières pour mieux comprendre ce concept.

Exemple d'expression régulière

Dans cette section, je vais vous montrer quelques exemples d'expressions régulières pour vous aider à mieux comprendre ce concept.

Supposons que vous ayez cette expression régulière :

/abder/
Copier après la connexion

Cela nous dit simplement de faire correspondre uniquement les mots abder.

Que pensez-vous de cette expression régulière ?

/a[nr]t/
Copier après la connexion

Vous pouvez lire cette expression régulière comme suit : Recherchez un modèle de texte dont la première lettre est a,最后一个字母是 t,这些字母之间是 n 或 r。所以匹配的词是 antart.

Maintenant, laissez-moi vous faire un petit quiz. Comment écrire une expression régulière qui se termine par ca 开头,并以以下一个或全部字符 tbr ? Oui, cette expression régulière peut s'écrire comme suit :

/ca[tbr]/
Copier après la connexion

Si vous voyez une chaîne commençant par le symbole circonflexe ^ 开头的正则表达式,则表示匹配以 ^ 之后提到的字符串开头的字符串。因此,如果您有下面的正则表达式,它会匹配以 This.

/^This/
Copier après la connexion

Ainsi, dans la chaîne suivante :

My name is Abder
This is Abder
This is Tom
Copier après la connexion

Basé sur l'expression régulière /^This/, correspondra à la chaîne suivante :

This is Abder
This is Tom
Copier après la connexion

Et si nous voulons faire correspondre des chaînes qui se terminent par une certaine chaîne  ? Dans ce cas, nous utilisons le signe dollar $. Voici un exemple :

Abder$
Copier après la connexion

Donc, dans la chaîne ci-dessus (trois lignes), cette expression régulière sera utilisée pour correspondre au modèle suivant :

My name is Abder
This is Abder
Copier après la connexion

Alors, que pensez-vous de cette expression régulière ?

^[A-Z][a-z]
Copier après la connexion

Je sais que cela peut paraître compliqué à première vue, mais regardons-le petit à petit.

Nous avons appris ce qu'est un iambique ^ 。这意味着匹配以某个字符串开头的字符串。 [A-Z] 指的是大写字母。因此,如果我们阅读正则表达式的这一部分: ^[A-Z],它告诉我们匹配以大写字母开头的字符串。最后一部分 [a-z] signifie que lorsqu'une chaîne est trouvée qui commence par une lettre majuscule, elle sera suivie d'une lettre minuscule de l'alphabet.

Alors, laquelle des chaînes suivantes sera mise en correspondance à l'aide de cette expression régulière ? 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
Copier après la connexion

Les expressions régulières sont un sujet très vaste, ces exemples sont juste pour vous donner une idée de ce qu'elles sont et pourquoi nous les utilisons.

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

Expressions régulières en Python

Passons maintenant à la partie amusante. Nous aimerions voir comment utiliser certaines des expressions régulières ci-dessus en Python. Le module que nous utiliserons pour gérer les expressions régulières en Python est le module re.

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

import re
text = 'My name is Abder'
match_pattern = re.match(r'Abder', text)
print match_pattern
Copier après la connexion

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

Le script fonctionne bien, mais le problème réside dans la façon dont fonctionne la fonction match(). Si nous renvoyons le document du module match() 的工作方式。如果我们返回 re 模块文档,这就是函数 match(), voici ce que fait la fonction match() :

如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。如果字符串与模式不匹配,则返回 None;请注意,这与零长度匹配不同。

啊哈,从这里我们可以看出,match() 仅当在字符串的开头找到匹配项时才会返回结果。

我们可以使用函数 search(),这是基于文档的:

扫描字符串,查找正则表达式模式产生匹配的第一个位置,并返回相应的匹配对象。如果字符串中没有位置与模式匹配,则返回 None;请注意,这与在字符串中的某个点查找零长度匹配不同。

因此,如果我们编写上面的脚本,但使用 search() 而不是 match(),我们会得到以下输出:

<_sre.SRE_Match 0x101cfc988 处的对象>

即返回了一个匹配对象

如果我们想返回结果(字符串匹配),我们使用 group() 函数。如果我们想查看整个比赛,我们使用 group(0)。因此:

打印 match_pattern.group(0)

将返回输出:Abder

如果我们采用上一节中的第二个正则表达式,即 /a[nr]t/,则可以用 Python 编写如下:

import re
text = 'This is a black ant'
match_pattern = re.search(r'a[nr]t', text)
print match_pattern.group(0)
Copier après la connexion

此脚本的输出是:ant

结论

文章越来越长,Python 中的正则表达式主题即使不是一本书,也肯定需要不止一篇文章。

然而,本文旨在让您快速入门并有信心进入 Python 正则表达式的世界。您可以参考 re 文档来了解有关此模块的更多信息以及如何深入了解该主题。

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal