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中类的定义、继承及使用对象实例详解
Apr 30 Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
python 快速把超大txt文件转存为csv的实例
Oct 26 Python
python实现简易动态时钟
Nov 19 Python
python根据url地址下载小文件的实例
Dec 18 Python
Python面向对象魔法方法和单例模块代码实例
Mar 25 Python
解决 jupyter notebook 回车换两行问题
Apr 15 Python
PyCharm MySQL可视化Database配置过程图解
Jun 09 Python
使用OpenCV去除面积较小的连通域
Jul 05 Python
keras 模型参数,模型保存,中间结果输出操作
Jul 06 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
如何用Python提取10000份log中的产品信息
Jan 14 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安全性漫谈
2012/06/28 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
js实现一键复制功能
2017/03/16 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
Python 专题三 字符串的基础知识
2017/03/19 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
pip安装python库的方法总结
2019/08/02 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
python设置代理和添加镜像源的方法
2020/02/14 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
十佳大学生事迹材料
2014/01/29 职场文书
水利学院求职自荐书
2014/02/01 职场文书
党性观念心得体会
2014/09/03 职场文书
安全生产工作汇报
2014/10/28 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android
linux目录管理方法介绍
2022/06/01 Servers