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实现百度关键词排名查询
Mar 30 Python
Python编程入门之Hello World的三种实现方式
Nov 13 Python
python线程池threadpool实现篇
Apr 27 Python
Python中super函数用法实例分析
Mar 18 Python
Python中面向对象你应该知道的一下知识
Jul 10 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
Aug 05 Python
Python提取PDF内容的方法(文本、图像、线条等)
Sep 25 Python
Python 3.6打包成EXE可执行程序的实现
Oct 18 Python
python中shell执行知识点
May 06 Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 Python
手把手教你配置JupyterLab 环境的实现
Feb 02 Python
python神经网络 使用Keras构建RNN训练
May 04 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有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
List Installed Software Features
2007/06/11 Javascript
JS 控制非法字符的输入代码
2009/12/04 Javascript
Js 冒泡事件阻止实现代码
2013/01/27 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
2016/07/27 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
vue绑定的点击事件阻止冒泡的实例
2018/02/08 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
javascript实现画板功能
2020/04/12 Javascript
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
Python实现批量修改文件名实例
2015/07/08 Python
Python实现读取并保存文件的类
2017/05/11 Python
Python反射的用法实例分析
2018/02/11 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
记帐员岗位责任制
2014/02/08 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
支行行长岗位职责
2015/02/15 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
公司职员入党自传书
2015/06/26 职场文书
交通事故责任认定书
2015/08/06 职场文书
Python机器学习之逻辑回归
2021/05/11 Python
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
sql server 累计求和实现代码
2022/02/28 SQL Server
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS