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中使用next()方法操作文件的教程
May 24 Python
利用matplotlib+numpy绘制多种绘图的方法实例
May 03 Python
Python的语言类型(详解)
Jun 24 Python
Python正则表达式匹配数字和小数的方法
Jul 03 Python
OpenCV 边缘检测
Jul 10 Python
django mysql数据库及图片上传接口详解
Jul 18 Python
python二元表达式用法
Dec 04 Python
python实现ftp文件传输功能
Mar 20 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
Jul 09 Python
Python无损压缩图片的示例代码
Aug 06 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
Aug 22 Python
Python3+Flask安装使用教程详解
Feb 16 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根据IP地址获取所在城市具体实现
2013/11/27 PHP
php实现的农历算法实例
2015/08/11 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
2020/12/16 PHP
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
基于bootstrap风格的弹框插件
2016/12/28 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
python中的tcp示例详解
2018/12/09 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
彪马美国官网:PUMA美国
2017/03/09 全球购物
.NET现在共支持多少种语言
2014/02/26 面试题
大学生个人自我鉴定
2013/12/03 职场文书
MySQL库表名大小写的选择
2021/06/05 MySQL