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制作爬虫并将抓取结果保存到excel中
Apr 06 Python
详解Python函数作用域的LEGB顺序
May 14 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 Python
使用Python来开发微信功能
Jun 13 Python
Python函数参数操作详解
Aug 03 Python
详解通过API管理或定制开发ECS实例
Sep 30 Python
python django下载大的csv文件实现方法分析
Jul 19 Python
python实现高斯判别分析算法的例子
Dec 09 Python
关于Tensorflow 模型持久化详解
Feb 12 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
May 11 Python
使用OpenCV校准鱼眼镜头的方法
Nov 26 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 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
php缓冲 output_buffering的使用详解
2013/06/13 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
PHP数组游标实现对数组的各种操作详解
2016/01/26 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
Javascript变量函数浅析
2011/09/02 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
python 获取图片分辨率的方法
2019/01/08 Python
Python魔法方法详解
2019/02/13 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
服装公司总经理岗位职责
2013/11/30 职场文书
大三预备党员入党思想汇报
2014/01/08 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
英语教师求职信
2014/06/16 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
灵魂歌王观后感
2015/06/17 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
一条 SQL 语句执行过程
2022/03/17 MySQL