Python Les expressions régulières entrée rapide

Les expressions régulières sont souvent utilisés dans l'élaboration de programmes, telles que les données (format) authentification, chaîne de caractères de remplacement contenu et extraire le contenu de sorte que la situation sera utilisée, mais maintenant de nombreux développeurs pour l'expression régulière que dans la compréhension de base ou volonté avec un étage. Une fois que la situation (par exemple robots d'exploration Web) en grandes quantités en utilisant des expressions régulières rencontrées peut dire que, fondamentalement, jeté hors d'équilibre. Cet article, je vais vous prendre pour en apprendre davantage sur l'utilisation de l'expression régulière Python. Avant de lire cet article, vous devez maîtriser les bases de Python, ou ont peut également être mis au point une connaissance de base d'autres langues, parce que fondamentalement chaque langue utilisant des expressions régulières de manière similaires.

Zéro, la base régulière d'expression

  1. caractère extractibles (string)
    Parfois , nous devons obtenir un morceau de contenu à partir d' une chaîne, ce contenu peut être un caractère peut également être une chaîne, sinon littéralement, puis de temps de contraste traverse mais aussi sujettes à l' erreur. Eh bien, cette fois -ci, nous pouvons utiliser une expression régulière correspondant de caractère fonction. Les expressions régulières fournissent une méthode pour faire correspondre 4 caractères pour nous, comme suit:
grammaire explication exemple matchs à cordes
. Correspond à tout caractère sauf nouvelle ligne « \ n » dans un B PBR, adb, A2B, a ~ b
\ Évasion, de transférer un caractère après caractère à changer le sens original abc abc, ac, a \ c
[] Tout caractère entre les crochets a B c d e F abd, acf, adf, aef
[^] En plus des caractères dans les parenthèses, les autres personnages correspondent à un [^ a, b, c, d, e] f A1f, un # f, AZF, AGF
  1. caractères prédéfinis
    caractères appelés un caractère prédéfini est une expression régulière à notre réservée spécialement conçu pour correspondre à la mise en forme du contenu, comme correspondant à des numéros avec le \ d et la correspondance des espaces \ s , et ainsi de suite. Nous pouvons répondre rapidement le contenu d'une chaîne pour répondre aux exigences de l'utilisation des caractères prédéfinis. le contenu correspondant aux caractères pré - définies, le même peut également être utilisé de la manière précédemment caractère oral correspond au match, mais la quantité de code est relativement peu. Répertoriés dans le tableau est des caractères prédéfinis:
grammaire explication exemple matchs à cordes
^ Ce qui a commencé avec une chaîne ^ 123 123abc, 123321,123zxc
$ En quoi la fin de la chaîne 123 $ abc123,321123, zxc123
\ b Faites correspondre une limite de mot, ne correspond à aucun caractère \ Basd \ b asd
\ré Faites correspondre 0-9 zx de dc zx1c, zx2c, ZX5C
\RÉ Correspondant non numérique zx \ Dc zxvc, zx c $, zx etc.
\ s des espaces match zx \ sc zx c
\ S Correspondant à des caractères non-blancs zx \ Sc zxac, zx1c, zxtc
\ w Faites correspondre des lettres, des chiffres et underscores zx de la c zxdc, zx1c, zx_c
\ W lettres non-correspondance, chiffres et underscores zx \ Wc zx c zx $ c zx (c

Il y a des personnages prédéfinis des points suivants doivent être respectés:

  • \ B correspond à une seule position, un côté de cette position est un caractère constituant un mot, l'autre côté du début de caractères non-mot ou à la fin de la chaîne. \ B est une largeur nulle.
  • \ W gamme adaptée de différentes langues de codage ne sont pas les mêmes, la langue correspond au code ASCII est [a-zA-Z0-9_], et correspondant au code de langue Unicode est [a-zA -Z0-9_] et les caractères chinois, symboles pleine largeur et d'autres caractères spéciaux.
  1. Quantité
    dans certains cas , nous avons besoin de faire correspondre un contenu en double, alors nous pouvons utiliser le nombre de défini le fonctionnement en mode. Le nombre définit le tableau suivant:
grammaire explication exemple matchs à cordes
* 0 fois pour correspondre zxc * zx, zxccccc
+ 1 plusieurs fois pour correspondre zxc + zxc, zxccccc
? Match 0 ou 1 zxc? zxc, zx
{M} Match m fois zxc {3}, etc. zxcccvb
{M,} Match m fois ou plus zxc {3}, etc. zxcccvb, zxccccccccvb
{N} 0 à n Associez fois zxc {3}, etc. zxvb, zxcvb, zxccvb, zxcccvb
{M, n} Adapté à n fois m fois {1,3} zxc zxcvb, zxccvb, zxcccvb
  1. Assertion
    affirmation, aussi appelée assertion de longueur nulle, se référant à l'expression d'assertion quand le match était quand est vrai, mais ne correspond pas au contenu de l'expression de l' affirmation. Et à la fin est le début, $ représentants ^, \ b représente la limite de mot comme avant et arrière affirmation d'assertion a un effet similaire, ils correspondent à certains endroits seulement dans le processus d'appariement, ne prenez pas le caractère, que l' on appelle zéro largeur. L'emplacement que l' on appelle se réfère à la gauche du premier caractère de la chaîne, le milieu et les personnages adjacents à droite du dernier caractère. Il y a quatre expression d'assertion zéro largeur:
  • examen négatif zéro largeur faite après l'affirmation (? <! Exp), correspondant à une position derrière l'affirmation ne tient pas lorsque l'expression ne correspond pas à l'établissement. Par exemple, \ w + \ d, zxc chaîne correspondante ne se termine pas (<zxc?);
  • Rappelant la première affirmation de zéro négatif largeur (?! Exp), l'expression correspond à la position d'affirmation précédente, ne correspond pas à l'établissement. Par exemple: \ d \ w +, chaîne de caractères correspondant ne démarre pas avec zxc; (zxc ?!)
  • (? = Exp) Première affirmation, l'affirmation est vraie position correspondante devant l'affirmation, par exemple, match de chasse « une expression régulière » cette chaîne dans la re régulière, on peut écrire re (= gular?);
  • Cheveux après assertion (? <= Exp), l'affirmation est vraie position match derrière l'affirmation, par exemple, la chaîne "egex représente l'expression régulière" afin de faire correspondre l'expression rationnelle et plus régulière re, vous pouvez utiliser re (?! G ) cette expression définit l'emplacement du nouveau droit, ce n'est pas une position derrière le g de caractère. Pré et post-cheveux différence est que la position du caractère après le match si l'expression entre parenthèses.
  1. Greed / non gourmand
    regex correspondra autant que possible le caractère, qui est appelé modèle d'expression régulière avide, cupide est le mode par défaut. Mais parfois , nous donner avide causer des souffrances inutiles, par exemple, nous voulons correspondre à la chaîne « Jack123Chen123Chen » dans « Jack123Chen », mais par la cupidité pattern matching est « Jack123Chen123Chen », alors nous devons utiliser non gourmand mode pour résoudre ce problème, le mode non gourmand expression couramment utilisée est la suivante:
grammaire explication
*? Faites correspondre 0 ou plus, mais moins autant que possible les doubles emplois
+? Match 1 fois ou plus, mais moins autant que possible les doubles emplois
?? Faites correspondre 0 ou 1, mais moins autant que possible les doubles emplois
{M,}? Matches m fois ou plus, mais moins autant que possible les doubles emplois
{M, n}? Faites correspondre m fois ou n fois, autant que possible, mais moins répétition
  1. Autres
    contenus dans vos expressions régulières sont couramment utilisés, le regard let au non utilisé, mais la même syntaxe puissante.
  • OU correspondance, également connu sous le nom branche correspondant, cette branche aussi longtemps que il y a un match match même, et OR déclarations que nous utilisons dans le développement de même. OU utilisation correspondant | branche split, par exemple, nous avons besoin de faire correspondre le nom en anglais, mais en anglais prénom et nom de famille est possible · division, il peut y avoir un espace délimité, nous pouvons utiliser le ou match pour faire face à ce problème. Format est le suivant: [A-Za-z] + · [A-Za-z] + | [A-Za-z] + \ s [A-Za-z] +
  • La combinaison, plusieurs éléments seront combinés en une seule unité, qui peut * + |? Et d'autres symboles à modifier, et les cordes, et cette combinaison peut se rappeler ce match attente de fournir des références d'utilisation. Utilisation paquet () de la Fig. Telles que la date d'accès expression régulière pourrait écrire: \ d {4} - (0 [1-9] | 1 [0-2]) - (0 [1-9] | [12] [0-9] | 3 [01]). Le premier paquet (0 [1-9] | 1 [0-2]) est le mois d'allumette ordinaire, le second paquet (0 [1-9] | [12] [0-9] | 3 [01] ) représente le jour du match régulier.

A, Python en utilisant des expressions régulières

Utilisez des expressions régulières en Python est très simple, Re Module nous fournit le support des expressions régulières. Un total de trois étapes en utilisant les étapes consistant à :

  • Conversion de la chaîne régulière expression Motif instance;
  • Utilisation Motif caractères exemple pour être adaptées au traitement, le résultat de mise en correspondance est un match exemple;
  • Faites correspondre pour mener à bien l'opération avec les exemples suivants.

En Python, nous avons utilisé la méthode de re Il y a six, à savoir: la compilation , correspondance , Recherche , findAll , de Split et Sub , l'explication suivante pour cela environ six méthodes.

  1. compilation
    rôle est de méthodes de compilation chaîne d'expression régulière en exemple de motif, deux paramètres ayant un motif et les indicateurs , le type de chaîne de modèle est le type de paramètre, la réception de la chaîne d'expression régulière, le type de drapeaux est un int, un reçu est le nombre d'appariement de formes, drapeaux paramètres non requis, la valeur par défaut est 0 (ignorés). drapeaux de correspondance de motif 6 comporte les éléments suivants:
Mode match explication
re.I ignorer la casse
RE.M mode match multiligne
re.S Tout mode de correspondance
re.L les modèles correspondants de caractères prédéfinis
re.U Définition d'un caractère de correspondance de motif
tour Mode verbeux

Le mode six est rarement utilisé dans le développement réel, nous avons seulement besoin de savoir peut être. Utilisez la compilation très simple, comme suit:

import re

pattern = re.compile(r'\d')
  1. correspondre à l'
    action de correspondance en utilisant par exemple de modèle, commencez par le côté gauche pour correspondre à la chaîne si un match pour retourner une instance Match, s'il n'y a pas de match pour le retour Aucun.
import re

def getMatch(message):
    pattern = re.compile(r'(\d{4}[-年])(\d{2}[-月])(\d{2}日{0,1})')
    match = re.match(pattern, message)
    if match:
        print(match.groups())
        for item in match.groups():
            print(item)
    else:
        print("没匹配上")


if __name__ == '__main__':
    message = "2019年01月23日大会开始"
    getMatch(message)
    message = "会议于2019-01-23召开"
    getMatch(message)

Nous utilisons le code des groupes de la méthode, cette méthode est utilisée pour obtenir une adaptation des chaînes sur. Après un certain temps ici , il y a beaucoup de lecteurs se demandent pourquoi le premier morceau de contenu peut correspondre la date et le deuxième morceau de contenu ne peut pas faire? En effet , la correspondance est une méthode de correspondance de la position de début de la chaîne. Code FIG résultats de fonctionnement:

QQ1vtA.png

  1. search
    search 方法与 match 方法功能是一样的,只不过 search 方法是对整个字符串进行匹配。将前一小节代码中的 getMatch 方法进行改动,即可将第二段内容中的年月日匹配出来。
import re

def getMatch(message):
    pattern = re.compile(r'(\d{4}[-年])(\d{2}[-月])(\d{2}日{0,1})')
    match = re.search(pattern, message)
    if match:
        print(match.groups())
        for item in match.groups():
            print(item)
    else:
        print("没匹配上")


if __name__ == '__main__':
    message = "2019年01月23日大会开始"
    getMatch(message)
    message = "会议于2019-01-23召开"
    getMatch(message)

上述代码运行结果如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VmTrXNxa-1575984679614)(https://s2.ax1x.com/2019/12/03/QQ8fR1.png)]
4. findall
findall 方法的作用是匹配整个字符串,以列表的形式返回所有匹配结果。

import re


def getMatch(message):
    pattern = re.compile(r'\w+')
    match = re.findall(pattern, message)
    if match:
        print(match)
    else:
        print("没匹配上")


if __name__ == '__main__':
    message = "my name is 张三"
    getMatch(message)
    message = "张三 is me"
    getMatch(message)

代码运行结果如下图:

QQGYy6.png
5. split
split 方法是利用指定的字符来分割字符串。

import re


def getMatch(message):
    pattern = re.compile(r'-')
    match = re.split(pattern, message)
    if match:
        print(match)
    else:
        print("没匹配上")


if __name__ == '__main__':
    message = "2018-9-12"
    getMatch(message)
    message = "第一步-第二步-第三步-第四步-and more"
    getMatch(message)

上述代码运行结果如下图:

QQGDfA.png
6. sub
sub 方法用来替换字符串,它接受5个参数,其中常用的有三个:

  • pattern,Pattern 实例
  • string,等待替换的字符串
  • repl,表示替换的新字符串或需要执行的替换方法
  • count,替换次数,默认为0表示全部替换
import re


def getMatch(match):
    return match.group(0).replace(r'年龄', 'age')


if __name__ == '__main__':
    message = "your 年龄 ?"
    pattern=re.compile(r'\w+')
    print(re.sub(pattern,getMatch,message))

代码运行结果如下图:

QQYSUg.png

三、总结

Python 中正则表达式使用起来非常方便,上面所展示的代码,完全可以直接复制出来稍加修改后放在项目中使用。内容不多,主要是讲解代码怎么使用,希望大家完全理解掌握了正则表达式的写法。

发布了204 篇原创文章 · 获赞 101 · 访问量 35万+

Je suppose que tu aimes

Origine blog.csdn.net/gangzhucoll/article/details/103483440
conseillé
Classement