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并发2之使用asyncio处理并发
Dec 21 Python
Python3之文件读写操作的实例讲解
Jan 23 Python
python爬虫爬取网页表格数据
Mar 07 Python
python web基础之加载静态文件实例
Mar 20 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
Python 串口读写的实现方法
Jun 12 Python
Python画图实现同一结点多个柱状图的示例
Jul 07 Python
django的ORM操作 删除和编辑实现详解
Jul 24 Python
python 实现简单的FTP程序
Dec 27 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
python 动态渲染 mysql 配置文件的示例
Nov 20 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文件读写操作之文件读取方法详解
2011/01/13 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
javascript XML数据显示为HTML一例
2008/12/23 Javascript
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
python 实现在Excel末尾增加新行
2018/05/02 Python
python实现多张图片拼接成大图
2019/01/15 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
python设置代理和添加镜像源的方法
2020/02/14 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
求职简历的自我评价怎样写好
2013/10/07 职场文书
学生会干部自荐信
2014/02/04 职场文书
生产文员岗位职责
2014/04/05 职场文书
教师产假请假条范文
2014/04/10 职场文书
旅游安全协议书
2014/04/21 职场文书
学习雷锋演讲稿
2014/05/10 职场文书
个人求职信范文
2014/05/24 职场文书
2015入党自荐书范文
2015/03/05 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
解析MySQL索引的作用
2022/03/03 MySQL