Maison  >  Article  >  développement back-end  >  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

黄舟
黄舟original
2017-08-08 11:05:142052parcourir

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']

Faites attention à comparer cette situation :


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

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')]
>>>

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']

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


>>> re.findall(r"a(\d+)b","a23b\na34b")
    ['23','43']

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']


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']


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']

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!

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