Python松散正则表达式用法分析


Posted in Python onApril 29, 2016

本文实例讲述了Python松散正则表达式用法。分享给大家供大家参考,具体如下:

Python 允许用户利用所谓的 松散正则表达式来完成这个任务。一个松散正则表达式和一个紧凑正则表达式主要区别表现在两个方面:

1. 忽略空白符。空格符,制表符,回车符不匹配它们自身,他们根本不参与匹配。(如果你想在松散正则表达式中匹配一个空格符,你必须在它前面添加一个反斜线符号对他进行转义)

2. 忽略注释。在松散正则表达式中的注释和在普通Python代码中的一样:开始于一个#符号,结束于行尾。这种情况下,采用在一个多行字符串中注释,而不是在源代码中注释,他们以相同的方式工作。

下面是一个松散正则表达式的例子,直观地看,正则表达式模式被分成好几行来写了,我们可以为每行配上我们的注释。这样在过段时间后回头过来看我们可以很快地知道这个正则表达式的作用,增强代码的可读性。

>>> import re
>>> pattern = """
  ^          # beginning of string
  M{0,4}       # thousands - 0 to 4 M's
  (CM|CD|D?C{0,3})  # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's),
            #      or 500-800 (D, followed by 0 to 3 C's)
  (XC|XL|L?X{0,3})  # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's),
            #    or 50-80 (L, followed by 0 to 3 X's)
  (IX|IV|V?I{0,3})  # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's),
            #    or 5-8 (V, followed by 0 to 3 I's)
  $          # end of string
  """
>>> re.search(pattern, 'M', re.VERBOSE)
<_sre.SRE_Match object at 0x01401570>
>>> re.search(pattern, 'MCMLXXXIX', re.VERBOSE)
<_sre.SRE_Match object at 0x014015C0>
>>> re.search(pattern, 'M')
>>>

使用松散正则表达式时必须传递另外一个参数re.VERBOSE,该参数是定义在re 模块中的一个常量,标志着待匹配的正则表达式是一个松散正则表达式。Python 不能自动检测一个正则表达式是为松散类型还是紧凑类型,所以必须显式的标明一个正则表达式为松散类型。所以

re.search(pattern, 'M', re.VERBOSE)#松散正则表达式

跟:

re.search(pattern, 'M'))#默认为“紧凑”正则表达式

得到的结果就不一样了。

下面是很常见的一些正则表达式

^ 匹配字符串的开始。
$ 匹配字符串的结尾。
\b 匹配一个单词的边界。
\d 匹配任意数字。
\D 匹配任意非数字字符。
x? 匹配一个可选的x字符(换句话说,它匹配1次或者0次x 字符)。
x* 匹配0次或者多次x字符。
x+匹配1次或者多次x字符。
x{n,m} 匹配x字符,至少n次,至多m次。
(a|b|c)要么匹配a,要么匹配b,要么匹配c。
(x) 一般情况下表示一个记忆组(remembered group). 我们可以利用re.search函数返回对象的groups()函数获取它的值。

更多关于Python相关内容可查看本站专题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python实现简单ftp客户端的方法
Jun 28 Python
python 生成器协程运算实例
Sep 04 Python
利用 python 对目录下的文件进行过滤删除
Dec 27 Python
python函数式编程学习之yield表达式形式详解
Mar 25 Python
django中模板的html自动转意方法
May 27 Python
Python生成指定数量的优惠码实操内容
Jun 18 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
python sorted函数原理解析及练习
Feb 10 Python
jupyter notebook tensorflow打印device信息实例
Apr 20 Python
Python爬虫爬取博客实现可视化过程解析
Jun 29 Python
基于Python爬取股票数据过程详解
Oct 21 Python
python 使用pandas读取csv文件的方法
Dec 24 Python
python中私有函数调用方法解密
Apr 29 #Python
简单学习Python time模块
Apr 29 #Python
Python中MySQL数据迁移到MongoDB脚本的方法
Apr 28 #Python
python遍历目录的方法小结
Apr 28 #Python
Python网络爬虫实例讲解
Apr 28 #Python
Python脚本实现自动发带图的微博
Apr 27 #Python
Python实现新浪博客备份的方法
Apr 27 #Python
You might like
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
2009/10/29 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
javascript实现类似java中getClass()得到对象类名的方法
2015/07/27 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
一次微信小程序内地图的使用实战记录
2019/09/09 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
Python ftp上传文件
2016/02/13 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
Python之pymysql的使用小结
2019/07/01 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
详解Python高阶函数
2020/08/15 Python
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
简单介绍Object类的功能、常用方法
2013/10/02 面试题
外贸业务员求职信范文
2013/12/12 职场文书
合同专员岗位职责
2013/12/18 职场文书
自我鉴定写作要点
2014/01/17 职场文书
软件售后服务承诺书
2014/05/21 职场文书
2015国庆节宣传语
2015/07/14 职场文书