Maison > développement back-end > Tutoriel Python > Explication détaillée des fonctions de correspondance non gourmandes et multilignes des expressions régulières en Python

Explication détaillée des fonctions de correspondance non gourmandes et multilignes des expressions régulières en Python

黄舟
Libérer: 2017-08-08 11:05:14
original
2085 Les gens l'ont consulté

Cet article présente principalement les fonctions de correspondance non gourmandes et multilignes des expressions régulières Python. Il analyse les méthodes d'implémentation et les précautions associées des fonctions de correspondance non gourmandes et multilignes des expressions régulières Python sous forme d'exemples. .Les amis qui en ont besoin peuvent Pour référence,

Les exemples de cet article décrivent la fonction de correspondance multiligne non gourmande des expressions régulières Python. Partagez-le avec tout le monde pour référence, comme suit :

Quelques conseils réguliers :

1 drapeau non gourmand


>>> re.findall(r"a(\d+?)","a23b") # 非贪婪模式
    ['2']
>>> re.findall(r"a(\d+)","a23b")
    ['23']
Copier après la connexion

Faites attention à comparer cette situation :


>>> re.findall(r"a(\d+)b","a23b")
    ['23']
>>> re.findall(r"a(\d+?)b","a23b") #如果前后均有限定条件,则非匹配模式失效
    ['23']
Copier après la connexion

2 Si vous souhaitez une correspondance multi-lignes, ajoutez re.S et re .M Flags

re.S : . correspondra aux nouvelles lignes, .comma par défaut ne correspondra pas aux nouvelles lignes


>>> re.findall(r"a(\d+)b.+a(\d+)b","a23b\na34b")
    []
>>> re.findall(r"a(\d+)b.+a(\d+)b","a23b\na34b",re.S)
    [('23','34')]
>>>
Copier après la connexion

re.M : Le drapeau ^$ correspondra à chaque ligne. Le ^ par défaut ne correspondra qu'à la première ligne conforme au modèle régulier ; le $ par défaut correspondra uniquement à la dernière ligne conforme au modèle régulier


>>> re.findall(r"^a(\d+)b","a23b\na34b")
    ['23']
>>> re.findall(r"^a(\d+)b","a23b\na34b",re.M)
    ['23','34']
Copier après la connexion

Cependant, s'il n'y a pas de signe ^,


>>> re.findall(r"a(\d+)b","a23b\na34b")
    ['23','43']
Copier après la connexion

est visible, il n'est pas nécessaire de re.M


import re
n='''12 drummers drumming,
11 pipers piping, 10 lords a-leaping'''
p=re.compile('^\d+')
p_multi=re.compile('^\d+',re.MULTILINE) #设置 MULTILINE 标志
print re.findall(p,n) #['12']
print re.findall(p_multi,n) # ['12', '11']
Copier après la connexion


import re
a = 'a23b'
print re.findall('a(\d+?)',a) #['2']
print re.findall('a(\d+)',a) #['23']
print re.findall(r'a(\d+)b',a) #['23']
print re.findall(r'a(\d+?)b',a) # ['23']
Copier après la connexion


b='a23b\na34b'
''' . 匹配非换行符的任意一个字符'''
print re.findall(r'a(\d+)b.+a(\d+)b',b) #[]
print re.findall(r'a(\d+)b',b,re.M) # ['23', '34']
print re.findall(r'^a(\d+)b',b,re.M) # ['23', '34']
print re.findall(r'a(\d+)b',b) #['23','34'] 可以匹配多行
print re.findall(r'^a(\d+)b',b) # ['23'] 默认^只会匹配符合正则的第一行
print re.findall(r'a(\d+)b$',b) # ['34'] 默认$只会匹配符合正则的末行
print re.findall(r'a(\d+)b',b,re.M) #['23', '34']
print re.findall(r'a(\d+)b.?',b,re.M) # ['23', '34'] 表达式中的'.'匹配除换行符以外的字符,'?'匹配前一个字符0次或1次
print re.findall(r"a(\d+)b", "a23b\na34b") # ['23', '34']
Copier après la connexion

Remarque : Python3.4 , print est une fonction et nécessite des parenthèses

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