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静态方法实例
Jan 14 Python
理解生产者消费者模型及在Python编程中的运用实例
Jun 26 Python
python网络爬虫学习笔记(1)
Apr 09 Python
Python实现计算圆周率π的值到任意位的方法示例
May 08 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
Jul 19 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
Pytorch中.new()的作用详解
Feb 18 Python
django自带的权限管理Permission用法说明
May 13 Python
keras 获取某层输出 获取复用层的多次输出实例
May 23 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
浅谈Python基础之列表那些事儿
May 11 Python
python获取字符串中的email
Mar 31 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
php中CI操作多个数据库的代码
2012/07/05 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
JavaScript中消除闭包的一般方法介绍
2015/03/16 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
javascript实现连续赋值
2015/08/10 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
jQuery实现图片向左向右切换效果的简单实例
2016/05/18 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
深入理解JavaScript中的for循环
2017/02/07 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
Python+Django搭建自己的blog网站
2018/03/13 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
python能在浏览器能运行吗
2020/06/17 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
指针和引用有什么区别
2013/01/13 面试题
C#可否对内存进行直接的操作
2015/02/26 面试题
介绍一下grep命令的使用
2012/06/28 面试题
销售个人求职信范文
2014/04/28 职场文书
酒店七夕情人节活动策划方案
2014/08/24 职场文书
新郎新娘答谢词
2015/01/04 职场文书
撤诉书怎么写
2015/05/19 职场文书
对PyTorch中inplace字段的全面理解
2021/05/22 Python