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 相关文章推荐
pymongo实现多结果进行多列排序的方法
May 16 Python
python之virtualenv的简单使用方法(必看篇)
Nov 25 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 Python
Python使用re模块实现信息筛选的方法
Apr 29 Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 Python
python版飞机大战代码分享
Nov 20 Python
Python给定一个句子倒序输出单词以及字母的方法
Dec 20 Python
python将txt等文件中的数据读为numpy数组的方法
Dec 22 Python
如何使用Python实现斐波那契数列
Jul 02 Python
python数值基础知识浅析
Nov 19 Python
Python定义一个函数的方法
Jun 15 Python
Python爬虫爬取微信朋友圈
Aug 06 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数组函数序列之in_array() 查找数组值是否存在
2011/10/29 PHP
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
PHP生成树的方法
2015/07/28 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
php数组分页实现方法
2016/04/30 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
jQuery实现的放大镜效果示例
2016/09/13 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
2018/03/08 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
python实现代码统计程序
2019/09/19 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
Python实现点云投影到平面显示
2020/01/18 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
免税水晶:Duty Free Crystal
2019/05/13 全球购物
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
生物技术专业研究生自荐信
2013/09/22 职场文书
后勤主管工作职责
2013/12/07 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书