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导出hive数据表的schema实例代码
Jan 22 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
python实现批量解析邮件并下载附件
Jun 19 Python
Python正则表达式实现简易计算器功能示例
May 07 Python
python导入坐标点的具体操作
May 10 Python
在Python中COM口的调用方法
Jul 03 Python
Django框架视图函数设计示例
Jul 29 Python
详解python pandas 分组统计的方法
Jul 30 Python
通过实例解析Python调用json模块
Dec 11 Python
python 多进程队列数据处理详解
Dec 23 Python
pytorch 自定义卷积核进行卷积操作方式
Dec 30 Python
Python如何实现定时器功能
May 28 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设计模式 Composite (组合模式)
2011/06/26 PHP
php tp验证表单与自动填充函数代码
2012/02/22 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
Laravel+Intervention实现上传图片功能示例
2019/07/09 PHP
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
js输出列表实现代码
2010/09/12 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
Python中将字典转换为列表的方法
2016/09/21 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
Python扩展内置类型详解
2018/03/26 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
django数据库自动重连的方法实例
2019/07/21 Python
Python如何存储数据到json文件
2020/03/09 Python
Python常用编译器原理及特点解析
2020/03/23 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
美国电视购物:QVC
2017/02/06 全球购物
教师通用专业自荐书范文
2014/02/11 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
物资采购管理制度
2015/08/06 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python
python cv2图像质量压缩的算法示例
2021/06/04 Python
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS