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中操作文件之write()方法的使用教程
May 25 Python
Python 处理数据的实例详解
Aug 10 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
django使用xlwt导出excel文件实例代码
Feb 06 Python
python 字典中取值的两种方法小结
Aug 02 Python
python学生管理系统开发
Jan 30 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
Python读取分割压缩TXT文本文件实例
Feb 14 Python
如何使用python代码操作git代码
Feb 29 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
python遍历路径破解表单的示例
Nov 21 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中去除所有js,html,css代码
2010/10/12 PHP
PHP 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
10款实用的PHP开源工具
2015/10/23 PHP
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
2015/11/07 Javascript
javascript中checkbox使用方法简单实例演示
2015/11/17 Javascript
javascript实现对表格元素进行排序操作
2015/11/18 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
python基础教程之自定义函数介绍
2014/08/29 Python
python实现顺序表的简单代码
2018/09/28 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
2020/01/20 Python
python 两种方法删除空文件夹
2020/09/29 Python
python破解同事的压缩包密码
2020/10/14 Python
在校生自我鉴定
2014/01/23 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
简单租房协议书
2014/04/09 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python
Ubuntu Server 安装Tomcat并配置systemctl
2022/04/28 Servers