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 相关文章推荐
Windows和Linux下Python输出彩色文字的方法教程
May 02 Python
Python调用系统底层API播放wav文件的方法
Aug 11 Python
pandas.DataFrame 根据条件新建列并赋值的方法
Apr 08 Python
解决Django migrate No changes detected 不能创建表的问题
May 27 Python
pandas重新生成索引的方法
Nov 06 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
Nov 15 Python
Python如何访问字符串中的值
Feb 09 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
Matplotlib配色之Colormap详解
Jan 05 Python
教你怎么用Python生成九宫格照片
May 20 Python
Python Pygame实战在打砖块游戏的实现
Mar 17 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
apache php模块整合操作指南
2012/11/16 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
Node对CommonJS的模块规范
2019/11/06 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
2020/09/05 Javascript
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
利用python实现平稳时间序列的建模方式
2020/06/03 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
Python编写单元测试代码实例
2020/09/10 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
学生党员思想汇报范文
2014/01/09 职场文书
犯错检讨书
2014/02/21 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
英文推荐信格式范文
2014/05/09 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
商场父亲节活动方案
2014/08/27 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
党校学习党性分析材料
2014/12/19 职场文书
广告公司文案策划岗位职责
2015/04/14 职场文书
经费申请报告
2015/05/15 职场文书
西安事变观后感
2015/06/12 职场文书
八年级数学教学反思
2016/02/17 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS