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 相关文章推荐
机器学习10大经典算法详解
Dec 07 Python
python实现决策树分类算法
Dec 21 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
利用Python查看微信共同好友功能的实现代码
Apr 24 Python
Python分支语句与循环语句应用实例分析
May 07 Python
python3 webp转gif格式的实现示例
Dec 10 Python
python词云库wordcloud的使用方法与实例详解
Feb 17 Python
使用pth文件添加Python环境变量方式
May 26 Python
keras导入weights方式
Jun 12 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
python 制作一个gui界面的翻译工具
May 14 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判断是否为json格式的方法
2014/03/04 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
最简单的js图片切换效果实现代码
2011/09/24 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
python编写爬虫小程序
2015/05/14 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
演讲稿怎么写
2014/01/07 职场文书
最新会计专业求职信范文
2014/01/28 职场文书
将相和教学反思
2014/02/04 职场文书
酒店员工培训方案
2014/06/02 职场文书
学生干部培训方案
2014/06/12 职场文书
党员自我对照检查材料
2014/08/19 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python
Apache POI操作批量导入MySQL数据库
2022/06/21 Servers