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的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
win10下Python3.6安装、配置以及pip安装包教程
Oct 01 Python
Python使用Turtle模块绘制五星红旗代码示例
Dec 11 Python
Python Tkinter 简单登录界面的实现
Jun 14 Python
Pandas中resample方法详解
Jul 02 Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 Python
简单了解python中的与或非运算
Sep 18 Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 Python
python_mask_array的用法
Feb 18 Python
Django Serializer HiddenField隐藏字段实例
Mar 31 Python
Python进行区间取值案例讲解
Aug 02 Python
Python实现科学占卜 让视频自动打码
Apr 09 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开发中常用的8个小技巧
2008/08/27 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
JavaScript获取多个数组的交集简单实例
2013/11/11 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
详解JS中的立即执行函数
2017/02/24 Javascript
ztree实现权限横向显示功能
2017/05/20 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
JS实现吸顶特效
2020/01/08 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
Python中除法使用的注意事项
2014/08/21 Python
python中pycurl库的用法实例
2014/09/30 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
Python类的继承和多态代码详解
2017/12/27 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
如何利用Python写个坦克大战
2020/11/18 Python
应聘护士自荐信
2013/10/21 职场文书
房地产还款计划书
2014/01/10 职场文书
公益广告宣传方案
2014/02/28 职场文书
社会实践活动总结
2015/02/05 职场文书
药店营业员岗位职责
2015/04/14 职场文书
公司的力量观后感
2015/06/05 职场文书
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
React四级菜单的实现
2022/04/08 Javascript