Python 正则表达式的高级用法


Posted in Python onDecember 04, 2016

对于Python来说,学习正则就要学习模块re的使用方法。本文将展示一些大家都应该掌握的高级技巧。

编译正则对象

re.compile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。用法上略有区别,举个例子, 匹配一个字符串可用如下方式:

如果使用compile,将变成:

为什么要这么用呢?其实就是为了提高正则匹配的速度,重复利用正则表达式对象。我们对比一下2种方式的效率:

Python 正则表达式的高级用法

可以看到第二种方式要快很多。在实际的工作中你会发现越多的使用编译好的正则表达式对象,效果就越好。

分组(group)

你可能已经见过对匹配的内容进行分组的用法了:

Python 正则表达式的高级用法

通过对要匹配的对象添加括号,就可以精确的对应符合的结果了。我们还可以进行嵌套的分组:

Python 正则表达式的高级用法

分组可以满足需求,但是有时候可读性很差,那可以对分组进行命名:

Python 正则表达式的高级用法

现在可读性就非常高了。

字符串匹配

学过sed的同学可能见过如下替换用法:

这个\1表示前面正则匹配到的结果。上面的sed也就是给匹配到的结果加上中括号。

在re模块中也存在这样的用法:

Python 正则表达式的高级用法

用命名分组也是可以的:

Python 正则表达式的高级用法

附近匹配(Look around)

re模块也支持附近匹配,看看例子就懂了:

Python 正则表达式的高级用法

正则匹配的时候使用函数

之前我们看到的大部分内容都是匹配的是一个表达式,但是有时候需求要复杂得多,尤其是在替换的时候。

举个例子,通过Slack的API能获取聊天记录,比如下面这句:

其中<@U1EAT8MG9>和<@U0K1MF23Z>是2个真实的用户,但是被Slack封装了,需要通过其他接口获取这个对应关系,

其结果类似这样:

在解析对应关系之后,还希望吧尖括号也去掉,替换后的结果是「@xiaoming, @laolin 嗯 确实是这样的 」

用正则怎么实现呢?

Python 正则表达式的高级用法

所以pattern当然也可以是一个函数

Python 相关文章推荐
Python简单生成随机姓名的方法示例
Dec 27 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
Jan 05 Python
Python 实现一行输入多个值的方法
Apr 21 Python
Python嵌套列表转一维的方法(压平嵌套列表)
Jul 03 Python
Python实现手写一个类似django的web框架示例
Jul 20 Python
python程序封装为win32服务的方法
Mar 07 Python
对python函数签名的方法详解
Jan 22 Python
Python3.6.x中内置函数总结及讲解
Feb 22 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
Cython编译python为so 代码加密示例
Dec 23 Python
Pytorch之Variable的用法
Dec 31 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 11 Python
简单谈谈Python流程控制语句
Dec 04 #Python
python中正则的使用指南
Dec 04 #Python
win与linux系统中python requests 安装
Dec 04 #Python
详解Python各大聊天系统的屏蔽脏话功能原理
Dec 01 #Python
python模块简介之有序字典(OrderedDict)
Dec 01 #Python
Python中字符串的修改及传参详解
Nov 30 #Python
简单谈谈Python中的闭包
Nov 30 #Python
You might like
杏林同学录(五)
2006/10/09 PHP
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
php+mysql写的简单留言本实例代码
2008/07/25 PHP
PHP 采集程序原理分析篇
2010/03/05 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
用ADODB.Stream转换
2007/01/22 Javascript
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
python中的格式化输出用法总结
2016/07/28 Python
使用python实现BLAST
2018/02/12 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
测绘工程系学生的自我评价
2013/11/30 职场文书
应届毕业生个人求职自荐信
2014/01/06 职场文书
职工运动会邀请函
2014/02/02 职场文书
私人委托书格式
2014/09/10 职场文书
解除劳动合同协议书范本
2014/09/13 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
学校运动会加油词
2015/07/18 职场文书