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实现简单的多任务mysql转xml的方法
Feb 08 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
python画一个玫瑰和一个爱心
Aug 18 Python
Python 获取项目根路径的代码
Sep 27 Python
python+selenium+chromedriver实现爬虫示例代码
Apr 10 Python
django ORM之values和annotate使用详解
May 19 Python
pytorch 查看cuda 版本方式
Jun 23 Python
Pycharm新手使用教程(图文详解)
Sep 17 Python
浅析PyCharm 的初始设置(知道)
Oct 12 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 Python
使用Pytorch实现two-head(多输出)模型的操作
May 28 Python
python实现层次聚类的方法
Nov 01 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
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
PHP - Html Transfer Code
2006/10/09 PHP
在PHP里得到前天和昨天的日期的代码
2007/08/16 PHP
解析PHP工厂模式的好处
2013/06/18 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
详解AngularJS 过滤器的使用
2018/06/02 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
el-select数据过多懒加载的解决(loadmore)
2019/05/29 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
[12:29]2018国际邀请赛 开幕秀
2018/08/22 DOTA
深入学习Python中的上下文管理器与else块
2017/08/27 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
英国电信商店:BT Shop
2019/12/17 全球购物
linux面试题参考答案(6)
2016/06/23 面试题
大学生毕业求职简历的自我评价
2013/10/24 职场文书
服装创业计划书范文
2014/02/05 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
纠纷协议书
2014/04/16 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang
《堡垒之夜》联动《刺客信条》 4月7日正式上线
2022/04/06 其他游戏