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 相关文章推荐
django 按时间范围查询数据库实例代码
Feb 11 Python
Python实现决策树C4.5算法的示例
May 30 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
ActiveMQ:使用Python访问ActiveMQ的方法
Jan 30 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 Python
python计算无向图节点度的实例代码
Nov 22 Python
Python线程条件变量Condition原理解析
Jan 20 Python
python设置代理和添加镜像源的方法
Feb 14 Python
Python调用C语言程序方法解析
Jul 07 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
Aug 07 Python
Python自动化爬取天眼查数据的实现
Jun 15 Python
python基础之//、/与%的区别详解
Jun 10 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模板技术原理【一】
2008/01/10 PHP
crontab无法执行php的解决方法
2016/01/25 PHP
joomla组件开发入门教程
2016/05/04 PHP
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
AngularJS删除路由中的#符号的方法
2016/09/20 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
Python中functools模块函数解析
2017/03/12 Python
Python获取当前路径实现代码
2017/05/08 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
python deque模块简单使用代码实例
2020/03/12 Python
Numpy 多维数据数组的实现
2020/06/18 Python
python中id函数运行方式
2020/07/03 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
浪漫婚礼主持词
2014/03/14 职场文书
2014年财务科工作总结
2014/11/11 职场文书
2014年电教工作总结
2014/12/19 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书