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 相关文章推荐
scrapy爬虫实例分享
Dec 28 Python
pandas带有重复索引操作方法
Jun 08 Python
一百多行python代码实现抢票助手
Sep 25 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
Nov 10 Python
python程序封装为win32服务的方法
Mar 07 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
在python中实现同行输入/接收多个数据的示例
Jul 20 Python
Python集合操作方法详解
Feb 09 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
Django ORM filter() 的运用详解
May 14 Python
Python requests及aiohttp速度对比代码实例
Jul 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 nl2br()格式化输出的详解
2013/06/05 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
用javascript实现的图片马赛克后显示并切换加文字功能
2007/04/21 Javascript
JQuery select标签操作代码段
2010/05/16 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
JS获取多维数组中相同键的值实现方法示例
2017/01/06 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
替换python字典中的key值方法
2018/07/06 Python
Windows系统下PhantomJS的安装和基本用法
2018/10/21 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
幼师专业毕业生自荐信
2013/09/29 职场文书
党风廉正建设责任书
2015/01/29 职场文书
个人优缺点总结
2015/02/28 职场文书
关于观后感的作文
2015/06/18 职场文书
婚庆主持词大全
2015/06/30 职场文书
同学聚会祝酒词
2015/08/10 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
只用50行Python代码爬取网络美女高清图片
2021/06/02 Python
4种方法python批量修改替换列表中元素
2022/04/07 Python
Redis基本数据类型String常用操作命令
2022/06/01 Redis
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL