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通过cookie模拟已登录状态的初步研究
Nov 09 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
Nov 22 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
Mar 22 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
python3.7 使用pymssql往sqlserver插入数据的方法
Jul 08 Python
解决django-xadmin列表页filter关联对象搜索问题
Nov 15 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
Apr 10 Python
Python的历史与优缺点整理
May 26 Python
Python应用实现处理excel数据过程解析
Jun 19 Python
python中的None与NULL用法说明
May 25 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中var_export与var_dump的区别分析
2010/08/21 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
让PHP更快的提供文件下载的代码
2012/06/13 PHP
php PDO异常处理详解
2016/11/20 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
javascript 面向对象的JavaScript类
2010/05/04 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
javascript 伪数组实现方法
2010/10/11 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
2015/05/04 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
JS控制TreeView的结点选择
2016/11/11 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
python实现LRU热点缓存及原理
2019/10/29 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
Python爬取某平台短视频的方法
2021/02/08 Python
业务部经理岗位职责
2014/01/04 职场文书
党章学习思想汇报
2014/01/14 职场文书
英语生日邀请函
2014/01/23 职场文书
文体活动总结范文
2014/05/05 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书