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删除文件示例分享
Jan 28 Python
python实现支持目录FTP上传下载文件的方法
Jun 03 Python
python实现多线程的方式及多条命令并发执行
Jun 07 Python
详解supervisor使用教程
Nov 21 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
纯用NumPy实现神经网络的示例代码
Oct 24 Python
浅谈Python大神都是这样处理XML文件的
May 31 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
基于Python3.7.1无法导入Numpy的解决方式
Mar 09 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 Python
如何使用Pytorch搭建模型
Oct 26 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
php无限遍历目录示例
2014/02/21 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
2017/06/29 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
vuex 的简单使用
2018/03/22 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
对VUE中的对象添加属性
2018/09/18 Javascript
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
Python中字符串的格式化方法小结
2016/05/03 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
tensorflow更改变量的值实例
2018/07/30 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
应届实习生的自我评价范文
2014/01/05 职场文书
优秀干部获奖感言
2014/01/31 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
水电工岗位职责
2015/02/14 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
导游词之阆中古城
2019/12/23 职场文书
详解Nginx 工作原理
2021/03/31 Servers