本文摘自php中文网,作者黄舟,侵删。
这篇文章主要介绍了Python正则表达式非贪婪、多行匹配功能,结合实例形式分析了Python正则表达式中非贪婪及多行匹配功能的实现方法与相关注意事项,需要的朋友可以参考下本文实例讲述了Python正则表达式非贪婪、多行匹配功能。分享给大家供大家参考,具体如下:
一些regular的tips:
1 非贪婪flag
1 2 3 4 | >>> re.findall(r "a(\d+?)" , "a23b" )
[ '2' ]
>>> re.findall(r "a(\d+)" , "a23b" )
[ '23' ]
|
注意比较这种情况:
1 2 3 4 | >>> re.findall(r "a(\d+)b" , "a23b" )
[ '23' ]
>>> re.findall(r "a(\d+?)b" , "a23b" )
[ '23' ]
|
2 如果你要多行匹配,那么加上re.S和re.M标志
re.S:.将会匹配换行符,默认.逗号不会匹配换行符
1 2 3 4 5 | >>> 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:^$标志将会匹配每一行,默认^只会匹配符合正则的第一行;默认$只会匹配符合正则的末行
1 2 3 4 | >>> re.findall(r "^a(\d+)b" , "a23b\na34b" )
[ '23' ]
>>> re.findall(r "^a(\d+)b" , "a23b\na34b" ,re.M)
[ '23' , '34' ]
|
但是,如果没有^标志,
1 2 | >>> re.findall(r "a(\d+)b" , "a23b\na34b" )
[ '23' , '43' ]
|
可见,是无需re.M
1 2 3 4 5 6 7 | import re
n =
p = re. compile ( '^\d+' )
p_multi = re. compile ( '^\d+' ,re.MULTILINE)
print re.findall(p,n)
print re.findall(p_multi,n)
|
1 2 3 4 5 6 | import re
a = 'a23b'
print re.findall( 'a(\d+?)' ,a)
print re.findall( 'a(\d+)' ,a)
print re.findall(r 'a(\d+)b' ,a)
print re.findall(r 'a(\d+?)b' ,a)
|
1 2 3 4 5 6 7 8 9 10 11 | b = 'a23b\na34b'
print re.findall(r 'a(\d+)b.+a(\d+)b' ,b)
print re.findall(r 'a(\d+)b' ,b,re.M)
print re.findall(r '^a(\d+)b' ,b,re.M)
print re.findall(r 'a(\d+)b' ,b)
print re.findall(r '^a(\d+)b' ,b)
print re.findall(r 'a(\d+)b$' ,b)
print re.findall(r 'a(\d+)b' ,b,re.M)
print re.findall(r 'a(\d+)b.?' ,b,re.M)
print re.findall(r "a(\d+)b" , "a23b\na34b" )
|
注:Python3.4中,print为函数,需要加括号
以上就是Python中关于正则表达式非贪婪以及多行匹配功能详解的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Python使用matplotlib绘制饼图
pytho中字典操作方法介绍(代码示例)
Python--堡垒机的介绍
如何让Python运行在android上
Python3中setdefault的用法介绍(代码)
Python运算符-位运算符的实际运用与深入分析
Python中或者怎么表示
js和Python区别大不大
Python可以开发安卓app吗
Python继承与多重继承的简单讲解(代码示例)
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » Python中关于正则表达式非贪婪以及多行匹配功能详解