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本地与全局命名空间用法实例
Jun 16 Python
Python 专题三 字符串的基础知识
Mar 19 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
Python中文编码知识点
Feb 18 Python
Python自定义一个异常类的方法
Jun 27 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
Django用户身份验证完成示例代码
Apr 03 Python
VSCode配合pipenv搞定虚拟环境的实现方法
May 17 Python
利用python清除移动硬盘中的临时文件
Oct 28 Python
python语言实现贪吃蛇游戏
Nov 13 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读取数据库信息的几种方法
2008/05/24 PHP
openflashchart 2.0 简单案例php版
2012/05/21 PHP
thinkphp实现多语言功能(语言包)
2014/03/04 PHP
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
python类继承与子类实例初始化用法分析
2015/04/17 Python
python实现清屏的方法
2015/04/30 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
python文字转语音实现过程解析
2019/11/12 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
亚马逊印度站:Amazon.in
2017/10/15 全球购物
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
国培教师自我鉴定
2014/02/12 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
数学教育专业求职信
2014/07/22 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
oracle通过存储过程上传list保存功能
2021/05/12 Oracle
如何在python中实现ECDSA你知道吗
2021/11/23 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python