参考<<精通正则表达式>>一书对我们ETL log解析模块一个正则的优化

来源:互联网 发布:软件著作权怎么缴费 编辑:程序博客网 时间:2024/05/19 07:42

一句话需求:从ETL的log中提取出来一个ETL脚本落地了哪些临时表,日常数据库运维需要这些数据。

经过python程序处理后,提取到了如下的信息,这些在脚本中DELETE的都是临时表。

DELETE FROM DTEMP.L_SELL_PROXY_MARKETER_02 ALL;

可能大家疑惑这个很简单啊,不用正则,python完全可以处理。暂且不去讨论”前人”为何选择正则去处理。

先上”前人”的正则表达式:

.+\.(.+)\sALL;

分析该正则:

.+   .匹配换行以外的任意字符,而后面的+代表匹配优先量词,因此.+匹配了正行数据\.    匹配一个.符号,由于要匹配这个字符,前面.+不得不将他匹配到的吐出来,直到.的位置,这就产生了几十个回溯(.+)  同理依旧会吐下.以后所有的字符 \sALL;  又强迫(.+)吐出来很多字符,这又产生了回溯

这个正则总共回溯近40次 完成了匹配,虽然对我们的程序没有产生太大的效率问题,还是决定优化下这个正则。

该正则问题在于滥用. 和+

优化思考:
1:既然我只要表名(L_SELL_PROXY_MARKETER_02)那么我是否能将匹配的锚点定到.这个位置
2:分组中的.何不换成\w

最后的正则:

(?=\.)\.(\w+).?

优化后的执行:
这里写图片描述

测试通过:

import reprint re.search(r"(?=\.)\.(\w+).?","DELETE FROM DTEMP.L_SELL_PROXY_MARKETER_02 ALL;").group(1)
0 0
原创粉丝点击