Python使用re模块实现信息筛选的方法


Posted in Python onApril 29, 2018

本文实例讲述了Python使用re模块实现信息筛选的方法。分享给大家供大家参考,具体如下:

背景

平时工作中,我们经常会处理大量的元数据(Raw Data),而一般的文件编辑器只能一次查询一个关键字,这就难以连续的分析元数据,比如分析产品日志文件(log),日志可能包括很多information级别的信息,这些一般是我们不太关心的,我们主要关心的是一些特殊的调试(Debug)级别的信息,所以就有必要根据很多关键字筛选出来日志文件中我们所关系的信息,这样筛选出来的日志文件不仅具有连续性,而且易读性会非常好。

解决方案

re是Python自带的正则表达式库文件,为字符串的匹配筛选提供了极大的便利,本文就是利用re来进行日志文件的信息筛选。首先,简单来看一下re中的主要函数:

1. Compile(pattern, flag):对正则表达式进行编译,比检查语法的正确性。flag是编译的标签,这里只介绍DOTALL,表示匹配所有的字符,包括新的行。

>>> import re
>>> re.compile('[abc]+')
re.compile('[abc]+')
>>> re.compile(test)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
NameError: name 'test' is not defined
>>>

2. match(): 从目标字符串的开头来判断是否与正则表达式匹配,如果不匹配返回None,反之,返回匹配对象,包括起始位置,结束位置,字符串内容

>>> import re
>>> test = re.compile('[abc]+')
>>> test.match('dabc')
>>> test.match('babc')
<_sre.SRE_Match object; span=(0, 4), match='babc'>

test是一个以a或b或c开头的正则表达式编译对象,而match是从目标字符串的开头进行匹配,所以第一个目标字符串“dabc”不符合正则表达式规则,所以返回None;第二个目标字符串可以正常匹配输出匹配对象(起始位置,匹配内容),由于match每次都从目标字符串的开头进行匹配,所以如果有匹配字符串,其开始位置始终为0.

3. search:与match功能相近,search会扫描全目标字符串进行正则表达式匹配。

>>> import re
>>> test = re.compile('[abc]+')
>>> test.search('dabc')
<_sre.SRE_Match object; span=(1, 4), match='abc'>
>>>

这时用search就可以匹配a,b,c开头的字符串了

4. findall:找出目标字符串中所有的匹配字符串,并以列表的形式返回

>>> test = re.compile('\w+@163.com')
>>> test.findall(r"alvin@163.comtest1234@163.comnotvalid@gmail.com")
['alvin@163.com', 'test1234@163.com']

当然,re中还有很多其他的函数可供大家使用,大家可以去查阅python官方文档。

其次,介绍几个正则表达式常用的符号:

1. *: 表示匹配其前面字符0或多次
2. .: 表示匹配新行之外的所有字符
3. |: 表示或操作
4. +:表示匹配其前面紧邻字符一次或多次
5. ?: 表示匹配0或1次

其他的正则表达式的表示也可去官网文档查看。

最后,上一下这个简单的筛选程序:

import re
source = 'GCM.txt'
target = 'g2s.txt'
#一级筛选
raw_compile = re.compile(r"<g2s:g2sMessage.*?</g2s:g2sMessage>",re.DOTALL)
#二级筛选
messagelevel_compile = re.compile(r"<igtLicensing.*|<g2s:idReader.*",re.DOTALL)
#二级筛选
egmlevel_compile = re.compile(r"IGT_00012E2335AA.*",re.DOTALL)
def FilterG2SMessage():
  fr = open(source)
  content = fr.read()
  fr.close()
  f = open(target,'w')
  g2sItems = raw_compile.findall(content)
  for g2s in g2sItems:
    iscaredG2S = messagelevel_compile.search(g2s)
    isCaredEGM = egmlevel_compile.search(g2s)
    if iscaredG2S and isCaredEGM:
      f.write(g2s+'\n')
    else:
      pass
  f.close()
FilterG2SMessage()

程序很简单,在筛选的过程中大家可以先分析一下筛选的级别,可以逐级筛选。

总结:

re不仅仅提供了正则表达式的匹配,而且提供了一些批量处理的函数,比如splitsubsubn等等,这些函数都可以提高我们对文件内容的快速处理,节省时间。

Python 相关文章推荐
Python使用Flask框架获取当前查询参数的方法
Mar 21 Python
详解Python多线程
Nov 14 Python
关于Python元祖,列表,字典,集合的比较
Jan 06 Python
Python编程之event对象的用法实例分析
Mar 23 Python
Python实现Linux监控的方法
May 16 Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
May 03 Python
python中shell执行知识点
May 06 Python
Python新手学习装饰器
Jun 04 Python
django模型类中,null=True,blank=True用法说明
Jul 09 Python
python的launcher用法知识点总结
Aug 07 Python
Python排序算法之选择排序定义与用法示例
Apr 29 #Python
Python实现的直接插入排序算法示例
Apr 29 #Python
Python实现的堆排序算法示例
Apr 29 #Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 #Python
分享一下Python数据分析常用的8款工具
Apr 29 #Python
Python随机函数random()使用方法小结
Apr 29 #Python
Python中py文件引用另一个py文件变量的方法
Apr 29 #Python
You might like
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
php include,include_once,require,require_once
2008/09/05 PHP
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
python实现调用其他python脚本的方法
2014/10/05 Python
Python文件读取的3种方法及路径转义
2015/06/21 Python
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
财务检查整改报告
2014/11/06 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
浅谈MySQL user权限表
2021/06/18 MySQL
基于Python实现西西成语接龙小助手
2022/08/05 Golang