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 相关文章推荐
精确查找PHP WEBSHELL木马的方法(1)
Apr 12 Python
将Python中的数据存储到系统本地的简单方法
Apr 11 Python
Django查找网站项目根目录和对正则表达式的支持
Jul 15 Python
python获取当前运行函数名称的方法实例代码
Apr 06 Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 Python
python通过opencv实现图片裁剪原理解析
Jan 19 Python
使用Python打造一款间谍程序的流程分析
Feb 21 Python
Pandas实现一列数据分隔为两列
May 18 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
Jun 18 Python
python 利用toapi库自动生成api
Oct 19 Python
python3 re返回形式总结
Nov 20 Python
python 实现全球IP归属地查询工具
Dec 18 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
根德Grundig S400/S500/S700电路分析
2021/03/02 无线电
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
php调用C代码的实现方法
2014/03/11 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
vue的过滤器filter实例详解
2018/09/17 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
django 模型中的计算字段实例
2020/05/19 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
接口的多继承会带来哪些问题
2015/08/17 面试题
销售员自我评价怎么写
2013/09/19 职场文书
教育科研先进个人材料
2014/01/26 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
运动会的口号
2014/06/09 职场文书
小学师德师风整改措施
2014/10/27 职场文书
公司2014年度工作总结
2014/12/10 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
招商银行收入证明
2015/06/17 职场文书
Python  lambda匿名函数和三元运算符
2022/04/19 Python