Python正则表达式非贪婪、多行匹配功能示例


Posted in Python onAugust 08, 2017

本文实例讲述了Python正则表达式非贪婪、多行匹配功能。分享给大家供大家参考,具体如下:

一些regular的tips:

1 非贪婪flag

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

注意比较这种情况:

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

2 如果你要多行匹配,那么加上re.S和re.M标志

re.S:.将会匹配换行符,默认.逗号不会匹配换行符

>>> 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:^$标志将会匹配每一行,默认^只会匹配符合正则的第一行;默认$只会匹配符合正则的末行

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

但是,如果没有^标志,

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

可见,是无需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']

注:Python3.4中,print为函数,需要加括号

Python 相关文章推荐
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
Python写的创建文件夹自定义函数mkdir()
Aug 25 Python
tensorflow实现简单的卷积网络
May 24 Python
python实现flappy bird小游戏
Dec 24 Python
Tensorflow分类器项目自定义数据读入的实现
Feb 05 Python
python三引号输出方法
Feb 27 Python
解决python super()调用多重继承函数的问题
Jun 26 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
Python字符编码转码之GBK,UTF8互转
Feb 09 Python
python如何查看网页代码
Jun 07 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
Nov 09 Python
关于Python 3中print函数的换行详解
Aug 08 #Python
Python tkinter模块中类继承的三种方式分析
Aug 08 #Python
Python实现注册登录系统
Aug 08 #Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
Aug 08 #Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 #Python
Python初学时购物车程序练习实例(推荐)
Aug 08 #Python
Python爬虫之xlml解析库(全面了解)
Aug 08 #Python
You might like
php控制文件下载速度的方法
2015/03/24 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
YII框架http缓存操作示例
2019/04/29 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
onbeforeunload与onunload事件异同点总结
2013/06/24 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
js验证上传图片的方法
2015/05/12 Javascript
纯js模拟div层弹性运动的方法
2015/07/27 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
2013/01/31 HTML / CSS
医院院务公开实施方案
2014/05/03 职场文书
效能监察建议书
2014/05/19 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
股权转让协议范本
2014/12/07 职场文书
兼职安全员岗位职责
2015/02/15 职场文书