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开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
python列表的常用操作方法小结
May 21 Python
python对象及面向对象技术详解
Jul 19 Python
python使用psutil模块获取系统状态
Aug 27 Python
python实现日常记账本小程序
Mar 10 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
对python字典过滤条件的实例详解
Jan 22 Python
Python List列表对象内置方法实例详解
Oct 22 Python
wxPython实现列表增删改查功能
Nov 19 Python
Python安装并操作redis实现流程详解
Oct 13 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 Python
python音频处理的示例详解
Dec 23 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中使用Oracle数据库(5)
2006/10/09 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
JavaScript获取各大浏览器信息图示
2015/11/20 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
Vue 实现输入框新增搜索历史记录功能
2019/10/15 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
python字符串替换的2种方法
2014/11/30 Python
Python中暂存上传图片的方法
2015/02/18 Python
Python yield 使用方法浅析
2017/05/20 Python
python实现可逆简单的加密算法
2019/03/22 Python
简单了解python单例模式的几种写法
2019/07/01 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
越南综合购物网站:Lazada越南
2019/06/10 全球购物
大学生职业生涯规划书参考模板
2014/03/05 职场文书
联谊会主持词
2014/03/26 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
党校毕业个人总结
2015/02/28 职场文书
主持人大赛开场白
2015/05/29 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
pytorch中[..., 0]的用法说明
2021/05/20 Python
mysql中关键词exists的用法实例详解
2022/06/10 MySQL