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函数中的函数(闭包)用法实例
Mar 15 Python
python僵尸进程产生的原因
Jul 21 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
Apr 21 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
Dec 06 Python
分享8个非常流行的 Python 可视化工具包
Jun 05 Python
Python定时发送天气预报邮件代码实例
Sep 09 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
Python中的Cookie模块如何使用
Jun 04 Python
Visual Studio code 配置Python开发环境
Sep 11 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 22 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
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
PHP设计模式之委托模式定义与用法简单示例
2018/08/13 PHP
详解如何实现Laravel的服务容器的方法示例
2019/04/15 PHP
php解决安全问题的方法实例
2019/09/19 PHP
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
2014/11/19 Javascript
Three.js快速入门教程
2016/09/09 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
Python实现批量下载文件
2015/05/17 Python
python解析基于xml格式的日志文件
2017/02/25 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
基于python实现复制文件并重命名
2020/09/16 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
高职助产应届生自荐信
2013/09/24 职场文书
求职者应聘的自我评价
2013/10/16 职场文书
老师自我鉴定范文
2013/12/25 职场文书
会计大学生职业生涯规划书范文
2014/01/13 职场文书
职工小家建设活动方案
2014/08/25 职场文书
初中政治教学工作总结
2015/08/13 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android