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操作MongoDB基础知识
Nov 01 Python
Python环境下搭建属于自己的pip源的教程
May 05 Python
python去除空格和换行符的实现方法(推荐)
Jan 04 Python
浅谈python中的数字类型与处理工具
Aug 02 Python
谈谈python中GUI的选择
Mar 01 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 Python
Python深拷贝与浅拷贝用法实例分析
May 05 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
Jun 12 Python
Python函数中参数是传递值还是引用详解
Jul 02 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
详解selenium + chromedriver 被反爬的解决方法
Oct 28 Python
Python帮你解决手机qq微信内存占用太多问题
Feb 15 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
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
php重定向的三种方法分享
2012/02/22 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
JavaScript 特殊字符
2007/04/05 Javascript
浅谈Javascript事件模拟
2012/06/27 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
2014最热门的JavaScript代码高亮插件推荐
2014/11/25 Javascript
javascript基本类型详解
2014/11/28 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
全面了解js中的script标签
2016/07/04 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
2020/04/01 jQuery
python 实现堆排序算法代码
2012/06/05 Python
python创建临时文件夹的方法
2015/07/06 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
python微信好友数据分析详解
2018/11/19 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
一套比较完整的软件测试人员面试题
2012/05/13 面试题
保险经纪人求职信
2014/03/11 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python