python中如何正确使用正则表达式的详细模式(Verbose mode expression)


Posted in Python onNovember 08, 2017

简单介绍

正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。如果已经在其他语言里使用过正则表达式,只需要简单看一看就可以上手了。

下图展示了使用正则表达式进行匹配的流程:

python中如何正确使用正则表达式的详细模式(Verbose mode expression)

正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。

引言

当大家写的正则表达式比较长,比较复杂时,发现经常会写错,或者很难维护,遇到这种情况怎么办呢?这个不用急,聪明的设计人员早已经想到这种情况了,提供了一种叫做详细模式(Verbose mode expression)。当你使用这种模式时,可以给正则表达式添加注释,这样在维护时就不会像看天书了,同时也可以添加额外的空格,进行对齐排版。

紧凑模式的例子:

import re 
 
address = re.compile('[\w\d.+-]+@([\w\d.]+\.)+(com|org|edu)') 
 
candidates = [ 
 u'first.last@example.com', 
 u'first.last+category@gmail.com', 
 u'valid-address@mail.example.com', 
 u'not-valid@example.foo', 
] 
 
for candidate in candidates: 
 match = address.search(candidate) 
 print('{:<30} {}'.format( 
 candidate, 'Matches' if match else 'No match') 
 )

详细模式的修改之后:

#python 3.6 
#蔡军生 
#http://blog.csdn.net/caimouse/article/details/51749579 
# 
import re 
 
address = re.compile( 
 ''''' 
 [\w\d.+-]+ # username 
 @ 
 ([\w\d.]+\.)+ # domain name prefix 
 (com|org|edu) # TODO: support more top-level domains 
 ''', 
 re.VERBOSE) 
 
candidates = [ 
 u'first.last@example.com', 
 u'first.last+category@gmail.com', 
 u'valid-address@mail.example.com', 
 u'not-valid@example.foo', 
] 
 
for candidate in candidates: 
 match = address.search(candidate) 
 print('{:<30} {}'.format( 
 candidate, 'Matches' if match else 'No match'), 
 )

结果输出如下:

first.last@example.com  Matches
first.last+category@gmail.com Matches
valid-address@mail.example.com Matches
not-valid@example.foo  No match

参数解释:X    VERBOSE

该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。当该标志被指定时,在 RE 字符串中的空白符被忽略,除非该空白符在字符类中或在反斜杠之後;这可以让你更清晰地组织和缩进 RE。它也可以允许你将注释写入 RE,这些注释会被引擎忽略;注释用 "#"号 来标识,不过该符号不能在字符串或反斜杠之後。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
深入理解python try异常处理机制
Jun 01 Python
Python的collections模块中的OrderedDict有序字典
Jul 07 Python
简单谈谈Python中的反转字符串问题
Oct 24 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
Python二进制文件读取并转换为浮点数详解
Jun 25 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 Python
使用python3批量下载rbsp数据的示例代码
Dec 20 Python
pytorch实现对输入超过三通道的数据进行训练
Jan 15 Python
Python reques接口测试框架实现代码
Jul 28 Python
python如何实现图片压缩
Sep 11 Python
python爬不同图片分别保存在不同文件夹中的实现
Apr 02 Python
Python实现的扫码工具居然这么好用!
Jun 07 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
Nov 08 #Python
Python入门之三角函数全解【收藏】
Nov 08 #Python
Python入门之三角函数tan()函数实例详解
Nov 08 #Python
Python入门之三角函数sin()函数实例详解
Nov 08 #Python
Python入门之三角函数atan2()函数详解
Nov 08 #Python
使用Pyinstaller的最新踩坑实战记录
Nov 08 #Python
python的变量与赋值详细分析
Nov 08 #Python
You might like
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
Vue2实现组件props双向绑定
2016/12/02 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
python executemany的使用及注意事项
2017/03/13 Python
Python随机函数random()使用方法小结
2018/04/29 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
英国假发网站:Hothair
2018/02/23 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
行政办公室岗位职责
2014/03/18 职场文书
竞选班干部演讲稿
2014/04/24 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
工作检讨书大全
2015/01/26 职场文书
2015年教研员工作总结
2015/05/26 职场文书
2016年清明节寄语
2015/12/04 职场文书
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL