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实现dict版图遍历示例
Feb 19 Python
pycharm 使用心得(八)如何调用另一文件中的函数
Jun 06 Python
Python实现扫描指定目录下的子目录及文件的方法
Jul 16 Python
Python使用正则匹配实现抓图代码分享
Apr 02 Python
Windows中安装使用Virtualenv来创建独立Python环境
May 31 Python
python 全局变量的import机制介绍
Sep 07 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
Python Pandas数据结构简单介绍
Jul 03 Python
Python-copy()与deepcopy()区别详解
Jul 12 Python
用Python配平化学方程式的方法
Jul 20 Python
python pillow模块使用方法详解
Aug 30 Python
python区块链实现简版工作量证明
May 25 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
PHP4之真OO
2006/10/09 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
Prototype Object对象 学习
2009/07/12 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
py2exe 编译ico图标的代码
2013/03/08 Python
深入理解Python 代码优化详解
2014/10/27 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
对python调用RPC接口的实例详解
2019/01/03 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
python中pivot()函数基础知识点
2021/01/03 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
高考励志标语
2014/06/05 职场文书
英语课外活动总结
2014/08/27 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
销售内勤岗位职责
2015/02/10 职场文书
关于召开会议的通知
2015/04/15 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python