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
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!