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天气预报采集器实现代码(网页爬虫)
Oct 07 Python
在Python的Flask框架中验证注册用户的Email的方法
Sep 02 Python
浅谈Python 中整型对象的存储问题
May 16 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
Apr 25 Python
浅述python中深浅拷贝原理
Sep 18 Python
Python安装Flask环境及简单应用示例
May 03 Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 Python
python实现画出e指数函数的图像
Nov 21 Python
Flask中endpoint的理解(小结)
Dec 11 Python
Python如何测试stdout输出
Aug 10 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
Feb 27 Python
Python编写冷笑话生成器
Apr 20 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实现ODBC数据分页显示一例
2006/10/09 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
PDO::_construct讲解
2019/01/27 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
JavaScript中setInterval的用法总结
2013/11/20 Javascript
js比较日期大小的方法
2015/05/12 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
javascript获取图片的top N主色值方法详解
2018/01/26 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
vue 优化CDN加速的方法示例
2018/09/19 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
Java Varargs 可变参数用法详解
2020/01/28 Javascript
Python GAE、Django导出Excel的方法
2008/11/24 Python
如何高效使用Python字典的方法详解
2017/08/31 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
Python中单例模式总结
2018/02/20 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
pytorch自定义二值化网络层方式
2020/01/07 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
Ratchet 模态框的实现
2020/08/19 HTML / CSS
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
霸王洗发水广告词
2014/03/14 职场文书
教研活动总结
2014/04/28 职场文书
九九重阳节标语
2014/10/07 职场文书
寒山寺导游词
2015/02/03 职场文书
毕业生党员个人总结
2015/02/14 职场文书
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
MySQL主从切换的超详细步骤
2022/06/28 MySQL