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贪吃蛇游戏编写代码
Oct 26 Python
Python升级导致yum、pip报错的解决方法
Sep 06 Python
tensorflow入门之训练简单的神经网络方法
Feb 26 Python
Django处理文件上传File Uploads的实例
May 28 Python
Python访问MongoDB,并且转换成Dataframe的方法
Oct 15 Python
windows下安装Python虚拟环境virtualenvwrapper-win
Jun 14 Python
python简单实现矩阵的乘,加,转置和逆运算示例
Jul 10 Python
Python解析命令行读取参数之argparse模块
Jul 26 Python
Python占用的内存优化教程
Jul 28 Python
Python模块_PyLibTiff读取tif文件的实例
Jan 13 Python
python 实现学生信息管理系统的示例
Nov 28 Python
通用的Django注册功能模块实现方法
Feb 05 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学习之简单计算器实现代码
2011/06/09 PHP
php设计模式 State (状态模式)
2011/06/26 PHP
PHP页面中文乱码分析
2013/10/29 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
js自带函数备忘 数组
2006/12/29 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
javaScript实现滚动条事件详解
2020/03/24 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
Nuxt.js实战和配置详解
2019/08/05 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
java直接调用python脚本的例子
2014/02/16 Python
Python迭代器和生成器介绍
2015/03/06 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
用python生成1000个txt文件的方法
2018/10/25 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
澳大利亚冲浪和时尚服装网上购物:SurfStitch
2017/07/29 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
以太网Ethernet IEEE802.3
2013/08/05 面试题
促销活动策划方案
2014/01/12 职场文书
学雷锋月活动总结
2014/04/25 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
工作失职检讨书500字
2014/10/17 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
python使用pymysql模块操作MySQL
2021/06/16 Python
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏