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的ORM框架SQLObject入门实例
Apr 28 Python
一文总结学习Python的14张思维导图
Oct 17 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
python实现requests发送/上传多个文件的示例
Jun 04 Python
Linux下多个Python版本安装教程
Aug 15 Python
python+mysql实现个人论文管理系统
Oct 25 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
浅谈Python type的使用
Nov 19 Python
TensorFlow获取加载模型中的全部张量名称代码
Feb 11 Python
Django调用百度AI接口实现人脸注册登录代码实例
Apr 23 Python
Python自动发送和收取邮件的方法
Aug 12 Python
yolov5返回坐标的方法实例
Mar 17 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
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
两种php实现图片上传的方法
2016/01/22 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
JavaScript 题型问答有答案参考
2010/02/17 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
jquery的ajax异步请求接收返回json数据实例
2014/06/16 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
jQuery pagination分页示例详解
2018/10/23 jQuery
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
python读写csv文件方法详细总结
2019/07/05 Python
Django框架模板用法入门教程
2019/11/04 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
《故都的秋》教学反思
2014/04/15 职场文书
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
高三英语复习计划
2015/01/19 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
聘任书的格式及模板
2019/10/28 职场文书