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 相关文章推荐
详解Django通用视图中的函数包装
Jul 21 Python
Python中的条件判断语句与循环语句用法小结
Mar 21 Python
Python中str.format()详解
Mar 12 Python
Python爬豆瓣电影实例
Feb 23 Python
Python网页正文转换语音文件的操作方法
Dec 09 Python
python之yield和Generator深入解析
Sep 18 Python
python+mysql实现个人论文管理系统
Oct 25 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
python名片管理系统开发
Jun 18 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 Python
Python万能模板案例之matplotlib绘制甘特图
Apr 13 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
基于mysql的论坛(2)
2006/10/09 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
几个有趣的Javascript Hack
2010/07/24 Javascript
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
2013/11/14 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
python 多线程应用介绍
2012/12/19 Python
pandas 选择某几列的方法
2018/07/03 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
Python创建自己的加密货币的示例
2021/03/01 Python
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
茶叶生产计划书
2014/01/10 职场文书
安全技术说明书
2014/05/09 职场文书
地质灾害防治方案
2014/05/14 职场文书
夏季药店促销方案
2014/08/22 职场文书
广告设计专业毕业生自我鉴定
2014/09/27 职场文书
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
MySQL索引失效的典型案例
2021/06/05 MySQL