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解析xml文件实例分享
Dec 04 Python
python使用urllib2实现发送带cookie的请求
Apr 28 Python
详解Python中的__getitem__方法与slice对象的切片操作
Jun 27 Python
Django框架使用富文本编辑器Uedit的方法分析
Jul 31 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
Python使用sklearn实现的各种回归算法示例
Jul 04 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 Python
python实现滑雪游戏
Feb 22 Python
Python气泡提示与标签的实现
Apr 01 Python
python如何修改文件时间属性
Feb 05 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 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 xfocus防注入资料
2008/04/27 PHP
php array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
PHP 第二节 数据类型之字符串类型
2012/04/28 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
详解html-webpack-plugin用法全解
2018/01/22 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
2013/12/08 Python
python实现带声音的摩斯码翻译实现方法
2015/05/20 Python
Python如何为图片添加水印
2016/11/25 Python
python简单验证码识别的实现方法
2019/05/10 Python
Django 路由控制的实现
2019/07/17 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
python代码实现猜拳小游戏
2020/11/30 Python
说出数据连接池的工作机制是什么?
2013/04/19 面试题
易程科技软件测试笔试
2013/03/24 面试题
AURALog面试题软件测试方面
2013/10/22 面试题
大明湖导游词
2015/02/03 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
粗暴解决CUDA out of memory的问题
2021/05/22 Python
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python