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 Django做网页
Nov 04 Python
Python程序中用csv模块来操作csv文件的基本使用教程
Mar 03 Python
通过Python模块filecmp 对文件比较的实现方法
Jun 29 Python
对Python 内建函数和保留字详解
Oct 15 Python
python文件拆分与重组实例
Dec 10 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 Python
Python使用jupyter notebook查看ipynb文件过程解析
Jun 02 Python
python2和python3哪个使用率高
Jun 23 Python
python如何安装下载后的模块
Jul 03 Python
彻底搞懂python 迭代器和生成器
Sep 07 Python
聊聊Python String型列表求最值的问题
Jan 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
德生S2000电路分析
2021/03/02 无线电
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
php pdo操作数据库示例
2017/03/10 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
用Python中的字典来处理索引统计的方法
2015/05/05 Python
Python端口扫描简单程序
2016/11/10 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
python绘制多个曲线的折线图
2020/03/23 Python
在python中画正态分布图像的实例
2019/07/08 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
Saucony澳大利亚官网:美国跑鞋品牌,运动鞋中的劳斯莱斯
2018/05/05 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
酒店管理专业毕业生推荐信
2013/11/10 职场文书
总经理司机职责
2014/02/02 职场文书
家长会主持词
2014/03/26 职场文书
安全承诺书范文
2014/03/26 职场文书
股权收购意向书
2014/04/01 职场文书
2015年派出所工作总结
2015/04/24 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫