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实现调度算法代码详解
Dec 01 Python
python实现定时自动备份文件到其他主机的实例代码
Feb 23 Python
解决python大批量读写.doc文件的问题
May 08 Python
对python周期性定时器的示例详解
Feb 19 Python
Python中使用__new__实现单例模式并解析
Jun 25 Python
python使用writerows写csv文件产生多余空行的处理方法
Aug 01 Python
python实现字典嵌套列表取值
Dec 16 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
Python数组拼接np.concatenate实现过程
Apr 18 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 Python
python中zip()函数遍历多个列表方法
Feb 18 Python
Python实现简繁体转换
Jun 07 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
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
php支付宝手机网页支付类实例
2015/03/04 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
jquery tools之tooltip
2009/07/25 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
2017/08/28 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
Python实现配置文件备份的方法
2015/07/30 Python
python素数筛选法浅析
2018/03/19 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
Django之腾讯云短信的实现
2020/06/12 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
2021/03/03 Python
德国PC硬件网站:CASEKING
2016/10/20 全球购物
作为网站管理者应当如何防范XSS
2014/08/16 面试题
三年级科学教学反思
2014/01/29 职场文书
食品安全汇报材料
2014/08/18 职场文书
出国导师推荐信
2015/03/25 职场文书
525心理健康活动总结
2015/05/08 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
Python中requests做接口测试的方法
2021/05/30 Python
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android
Django框架模板用法详解
2022/06/10 Python