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脚本文件打包成可执行文件的方法
Jun 02 Python
python简单判断序列是否为空的方法
Jun 30 Python
使用Python编写简单的画图板程序的示例教程
Dec 08 Python
Python使用os模块和fileinput模块来操作文件目录
Jan 19 Python
django定期执行任务(实例讲解)
Nov 03 Python
python判断计算机是否有网络连接的实例
Dec 15 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
Jun 12 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 Python
python字典进行运算原理及实例分享
Aug 02 Python
python图像处理 PIL Image操作实例
Apr 09 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 13 Python
Python Django / Flask如何使用Elasticsearch
Apr 19 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
星际流派综述
2020/03/04 星际争霸
WHOIS类的修改版
2006/10/09 PHP
php表单转换textarea换行符的方法
2010/09/10 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
javascript实现简单的二级联动
2015/03/19 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
微信小程序仿知乎实现评论留言功能
2018/11/28 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
跟老齐学Python之集成开发环境(IDE)
2014/09/12 Python
用Python进行行为驱动开发的入门教程
2015/04/23 Python
Python中is与==判断的区别
2017/03/28 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
办公室文秘岗位职责
2013/11/15 职场文书
优秀员工自荐书范文
2013/12/08 职场文书
写给女朋友的检讨书
2014/01/28 职场文书
优秀团队获奖感言
2014/02/19 职场文书
学校端午节活动总结
2015/02/11 职场文书
学校中秋节活动总结
2015/03/23 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
余世维讲座观后感
2015/06/11 职场文书
护士心得体会范文
2016/01/25 职场文书
导游词之河北邯郸
2019/09/12 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript