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 23 Python
Python的subprocess模块总结
Nov 07 Python
用Python实现服务器中只重载被修改的进程的方法
Apr 30 Python
Python时间获取及转换知识汇总
Jan 11 Python
Python中matplotlib中文乱码解决办法
May 12 Python
python3+django2开发一个简单的人员管理系统过程详解
Jul 23 Python
python分别打包出32位和64位应用程序
Feb 18 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
PyChon中关于Jekins的详细安装(推荐)
Dec 28 Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
May 20 Python
python数字转对应中文的方法总结
Aug 02 Python
pandas中关于apply+lambda的应用
Feb 28 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
PHP5 字符串处理函数大全
2010/03/23 PHP
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
php日期操作技巧小结
2016/06/25 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
django 中的聚合函数,分组函数,F 查询,Q查询
2019/07/25 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
如何完美的建立一个python项目
2020/10/09 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
HTML5获取当前地理位置并在百度地图上展示的实例
2020/07/10 HTML / CSS
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
出生公证委托书
2014/04/03 职场文书
运动会表扬稿
2015/01/16 职场文书
捐助倡议书
2015/01/19 职场文书
销售会议开幕词
2015/01/28 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js