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安装教程
Feb 28 Python
Python中str.join()简单用法示例
Mar 20 Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
Python 获取主机ip与hostname的方法
Dec 17 Python
使用pycharm设置控制台不换行的操作方法
Jan 19 Python
在Python 字典中一键对应多个值的实例
Feb 03 Python
用Python调用win命令行提高工作效率的实例
Aug 14 Python
python 伯努利分布详解
Feb 25 Python
Python计算指定日期是今年的第几天(三种方法)
Mar 26 Python
keras 多gpu并行运行案例
Jun 10 Python
拿来就用!Python批量合并PDF的示例代码
Aug 10 Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
教你安装python Django(图文)
2013/11/04 Python
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
基于并发服务器几种实现方法(总结)
2017/12/29 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
在PyCharm中实现关闭一个死循环程序的方法
2018/11/29 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
擅自离岗检讨书
2014/02/11 职场文书
卫生系统先进事迹
2014/05/13 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python