Maison  >  Article  >  développement back-end  >  Une introduction détaillée à l'apprentissage du module re de la bibliothèque standard Python

Une introduction détaillée à l'apprentissage du module re de la bibliothèque standard Python

高洛峰
高洛峰original
2017-03-21 09:15:062062parcourir

Le module re fournit une série d'outils expression régulière (expression régulière) puissants qui vous permettent de vérifier rapidement si une chaîne donnée correspond à un modèle donné ( matchfonction ), ou inclure ce modèle (fonction de recherche). Les expressions régulières sont des modèles de chaînes écrits dans une syntaxe compacte (et mystérieuse).

1. Méthodes courantes

puissent être utilisé
Méthodes courantes Description
correspondance (pattern, string, flags=0) Si le début de la chaîne string correspond au modèle d'expression régulière, renvoie l'instance correspondante de MatchObject, sinon renvoie Aucun
search(pattern, string, flags=0) Analysez la chaîne, s'il y a une position qui correspond au modèle d'expression régulière, renvoie une instance de MatchObject, sinon ReturnNone
sub(pattern, repl, string, count=0, flags=0) correspondra à la partie du motif dans la chaîne , Remplacer par repl, jusqu'à compter fois
subn(pattern, repl, string, count=0, flags=0) est similaire à sub, renvoyé par subn Est une chaîne remplacée et un tableau d'heures correspondantes en un tuple
split(pattern, string, maxsplit=0, flags=0) Utilisez la chaîne correspondant au motif pour diviser la chaîne
findall(pattern, string, flags=0) Renvoyer la chaîne correspondant au modèle dans une chaîne sous forme de liste
compile( pattern , flags=0)compile(pattern, flags=0) Compile un modèle d'expression régulière dans un objet régulier afin que les méthodes de correspondance et de recherche de l'objet régulier
purge() Effacer l'expression régulière cache
escape( string ) Ajouter une barre oblique inverse à tous les caractères de la chaîne sauf les lettres et les chiffres

2. Caractères correspondants spéciaux

Syntaxe Description
. correspond à n'importe quel caractère à l'exception des sauts de ligne
^ l'en-tête correspond à
$ Correspondance de queue
* Correspond au personnage précédent 0 fois ou plus
Correspond au caractère précédent 1 ou plusieurs fois
? Faire correspondre le caractère précédent 0 ou une fois
{m,n} Correspond au caractère précédent m à n fois
Échapper à tout caractère spécial
[] est utilisé pour représenter un jeu de caractères combiné avec
| ou, cela signifie correspondant à n'importe lequel
à gauche et à droite

3. Méthode du module

re.match(pattern, string, flags=0)

  Correspond au début de la chaîne et renvoie une instance d'objet Match si le modèle correspond (Match objet décrit plus loin), sinon None est renvoyé. Flags est le mode de correspondance (décrit ci-dessous), qui est utilisé pour contrôler la méthode de correspondance des expressions régulières.

import re

a = &#39;abcdefg&#39;print re.match(r&#39;abc&#39;, a)  # 匹配成功print re.match(r&#39;abc&#39;, a).group()print re.match(r&#39;cde&#39;, a)  # 匹配失败>>><_sre.SRE_Match object at 0x0000000001D94578>
>>>abc
>>>None

search(pattern, string, flags=0)

Utilisé pour rechercher des sous-chaînes dans la chaîne qui peuvent être mises en correspondance avec succès. Si elles sont trouvées, renvoient une instance d'objet Match, sinon renvoient None. .

import re

a = &#39;abcdefg&#39;print re.search(r&#39;bc&#39;, a)print re.search(r&#39;bc&#39;, a).group()print re.search(r&#39;123&#39;, a)

>>><_sre.SRE_Match object at 0x0000000001D94578>
>>>bc
>>>None

sub(pattern, repl, string, count=0, flags=0)

Remplacer, remplacez la partie de la chaîne qui correspond au motif par repl, jusqu'à compter fois (Le les correspondances restantes ne seront pas traitées), puis la chaîne remplacée est renvoyée.

import re

a = &#39;a1b2c3&#39;print re.sub(r&#39;\d+&#39;, &#39;0&#39;, a)  # 将数字替换成&#39;0&#39;print re.sub(r&#39;\s+&#39;, &#39;0&#39;, a)  # 将空白字符替换成&#39;0&#39;>>>a0b0c0
>>>a1b2c3

subn(pattern, repl, string, count=0, flags=0)

C'est la même chose que la fonction sub(), sauf qu'elle renvoie un tuple contenant de nouveaux caractères Chaîne et le nombre de correspondances

import re

a = &#39;a1b2c3&#39;print re.subn(r&#39;\d+&#39;, &#39;0&#39;, a)  # 将数字替换成&#39;0&#39;>>>(&#39;a0b0c0&#39;, 3)

split(pattern, string, maxsplit=0, flags=0)

Version régulière de split(), divisée par sous-chaînes correspondant à la chaîne de motif, si des parenthèses sont utilisées dans le motif, alors la chaîne correspondant au motif sera également utilisée dans la liste des valeurs de retour, et maxsplit est la chaîne qui peut être divisée au maximum.

import re

a = &#39;a1b1c&#39;print re.split(r&#39;\d&#39;, a)print re.split(r&#39;(\d)&#39;, a)

>>>[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]
>>>[&#39;a&#39;, &#39;1&#39;, &#39;b&#39;, &#39;1&#39;, &#39;c&#39;]

findall(pattern, string, flags=0)

Renvoie les sous-chaînes non superposées correspondant au motif dans la chaîne sous la forme d'une liste.

import re

a = &#39;a1b2c3d4&#39;print re.findall(&#39;\d&#39;, a)

>>>[&#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;]

4. Objet Match

Si re.match() et re.search() correspondent avec succès, ils renverront un objet Match, qui contient de nombreuses informations sur la correspondance. . Vous pouvez utiliser les propriétés ou méthodes fournies par Match pour obtenir ces informations. Par exemple :

>>>import re

>>>str = &#39;he has 2 books and 1 pen&#39;
>>>ob = re.search(&#39;(\d+)&#39;, str)

>>>print ob.string  # 匹配时使用的文本
he has 2 books and 1 pen

>>>print ob.re # 匹配时使用的Pattern对象
re.compile(r&#39;(\d+)&#39;)

>>>print ob.group()  # 获得一个或多个分组截获的字符串
2

>>>print ob.groups()  # 以元组形式返回全部分组截获的字符串
(&#39;2&#39;,)

5. Objet Pattern

L'objet Pattern est renvoyé par re.compile(). Il a de nombreuses méthodes avec le même nom du module re, et le. les méthodes ont des fonctions similaires. Par exemple :

>>>import re
>>>pa = re.compile(&#39;(d\+)&#39;)

>>>print pa.split(&#39;he has 2 books and 1 pen&#39;)
[&#39;he has &#39;, &#39;2&#39;, &#39; books and &#39;, &#39;1&#39;, &#39; pen&#39;]

>>>print pa.findall(&#39;he has 2 books and 1 pen&#39;)
[&#39;2&#39;, &#39;1&#39;]

>>>print pa.sub(&#39;much&#39;, &#39;he has 2 books and 1 pen&#39;)
he has much books and much pen

6. Modèle de correspondance

La valeur du modèle de correspondance peut utiliser l'opérateur bit à bit OR '|' pour indiquer qu'il prend effet en même temps. temps, tels que re.I | re.M, voici quelques indicateurs courants.

  • re.I(re.IGNORECASE) : Ignorer la casse

>>>pa = re.compile(&#39;abc&#39;, re.I)
>>>pa.findall(&#39;AbCdEfG&#39;)
>>>[&#39;AbC&#39;]
  • re.L(re . LOCALE) : Localisation des jeux de caractères

Cette fonction permet de prendre en charge les environnements d'utilisation de jeux de caractères multilingues, tels que le caractère d'échappement w, dans un contexte anglais , cela signifie [a-zA-Z0-9], ce qui signifie tous les caractères et chiffres anglais. Si elles sont utilisées dans un environnement français, certaines chaînes françaises ne correspondront pas. Ajoutez cette option L et vous pourrez faire correspondre. Cependant, cela semble peu utile pour l’environnement chinois et ne peut toujours pas correspondre aux caractères chinois.

  • re.M(re.MULTILINE) : mode multi-ligne, modifier le comportement de '^' et '$'

>>>pa = re.compile(&#39;^\d+&#39;)
>>>pa.findall(&#39;123 456\n789 012\n345 678&#39;)
>>>[&#39;123&#39;]

>>>pa_m = re.compile(&#39;^\d+&#39;, re.M)
>>>pa_m.findall(&#39;123 456\n789 012\n345 678&#39;)
>>>[&#39;123&#39;, &#39;789&#39;, &#39;345&#39;]
  • re.S(re.DOTALL) : cliquez sur n'importe quel motif correspondant pour modifier le comportement de '.'

  .号将匹配所有的字符。缺省情况下.匹配除换行符\n外的所有字符,使用这一选项以后,点号就能匹配包括换行符的任何字符。

  • re.U(re.UNICODE): 根据Unicode字符集解析字符

  • re.X(re.VERBOSE): 详细模式

# 这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。以下两个正则表达式是等价的a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")# 但是在这个模式下,如果你想匹配一个空格,你必须用&#39;/ &#39;的形式(&#39;/&#39;后面跟一个空格)


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