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 相关文章推荐
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 Python
python实现根据指定字符截取对应的行的内容方法
Oct 23 Python
python 输入一个数n,求n个数求乘或求和的实例
Nov 13 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 Python
python图形绘制奥运五环实例讲解
Sep 14 Python
wxpython布局的实现方法
Nov 01 Python
Python networkx包的实现
Feb 14 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
django注册用邮箱发送验证码的实现
Apr 18 Python
Pytorch 如何实现常用正则化
May 27 Python
Python Matplotlib库实现画局部图
Nov 17 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
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
jquery自定义插件——window的实现【示例代码】
2016/05/06 Javascript
jquery判断对象是否为空并遍历对象的简单实例
2016/07/26 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
python版本的仿windows计划任务工具
2018/04/30 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
Python笔记之工厂模式
2019/11/20 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
python3跳出一个循环的实例操作
2020/08/18 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
英国皇室御用百货:福南梅森(Fortnum & Mason)
2017/12/03 全球购物
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
教师节商场活动方案
2014/02/13 职场文书
计算机专业求职信
2014/06/02 职场文书
沈阳故宫导游词
2015/01/31 职场文书
校车司机安全责任书
2015/05/11 职场文书
企业员工辞职信范文
2015/05/12 职场文书
干部培训简讯
2015/07/20 职场文书
初中生物教学反思
2016/02/20 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书
Pygame Rect区域位置的使用(图文)
2021/11/17 Python