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实现监控windows服务并自动启动服务示例
Apr 17 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
python中enumerate函数遍历元素用法分析
Mar 11 Python
python if not in 多条件判断代码
Sep 21 Python
Python语言描述机器学习之Logistic回归算法
Dec 21 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 Python
python实现websocket的客户端压力测试
Jun 25 Python
为什么称python为胶水语言
Jun 16 Python
keras CNN卷积核可视化,热度图教程
Jun 22 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 13 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
使用PHP编写的SVN类
2013/07/18 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
php绘制一个矩形的方法
2015/01/24 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
JavaScript语法着色引擎(demo及打包文件下载)
2007/06/13 Javascript
Prototype Hash对象 学习
2009/07/19 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
vue项目前端知识点整理【收藏】
2019/05/13 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
python中map()与zip()操作方法
2016/02/27 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
浅谈flask源码之请求过程
2018/07/26 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
用Python 执行cmd命令
2020/12/18 Python
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
Vuori官网:运动服装的终级表现
2021/01/27 全球购物
单位绩效考核方案
2014/05/11 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
解除租赁合同协议书
2016/03/21 职场文书
Mysql数据库命令大全
2021/05/26 MySQL