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上的文件夹的实现代码
Feb 10 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
深入理解python中的select模块
Apr 23 Python
python绘制圆柱体的方法
Jul 02 Python
python turtle 绘制太极图的实例
Dec 18 Python
python 实现查询Neo4j多节点的多层关系
Dec 23 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
从0到1使用python开发一个半自动答题小程序的实现
May 12 Python
Python中的xlrd模块使用原理解析
May 21 Python
详解Django中views数据查询使用locals()函数进行优化
Aug 24 Python
python函数指定默认值的实例讲解
Mar 29 Python
Python常用配置文件ini、json、yaml读写总结
Jul 09 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
德劲1103的维修打理经验
2021/03/02 无线电
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
PHP实现Google plus的好友拖拽分组效果
2016/10/21 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
php给数组赋值的实例方法
2019/09/26 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
nodeJS实现路由功能实例代码
2017/06/08 NodeJs
探索webpack模块及webpack3新特性
2017/09/18 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
koa router 多文件引入的方法示例
2019/05/22 Javascript
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
python获取当前日期和时间的方法
2015/04/30 Python
Python中有趣在__call__函数
2015/06/21 Python
python对excel文档去重及求和的实例
2018/04/18 Python
pandas如何处理缺失值
2019/07/31 Python
python如何支持并发方法详解
2020/07/25 Python
HTML5标签使用方法详解
2015/11/27 HTML / CSS
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
幼儿园教师自荐书
2015/03/06 职场文书
小学班主任工作随笔
2015/08/15 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python
Python实现仓库管理系统
2022/05/30 Python