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绘制人人网好友关系图示例
Apr 01 Python
Python Deque 模块使用详解
Jul 04 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
Python 绘制酷炫的三维图步骤详解
Jul 12 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
Python类中方法getitem和getattr详解
Aug 30 Python
python使用matplotlib绘制雷达图
Oct 18 Python
python实现XML解析的方法解析
Nov 16 Python
python3.x 生成3维随机数组实例
Nov 28 Python
Python实现非正太分布的异常值检测方式
Dec 09 Python
春节到了 教你使用python来抢票回家
Jan 06 Python
Python基础之数据类型知识汇总
May 18 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
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
学习php设计模式 php实现单例模式(singleton)
2015/12/07 PHP
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
jQuery对象[0]是什么含义?
2010/07/31 Javascript
Dojo 学习要点
2010/09/03 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
多种方法实现load加载完成后把图片一次性显示出来
2014/02/19 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
JS定义类的六种方式详解
2016/05/12 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
几个提升Python运行效率的方法之间的对比
2015/04/03 Python
Python 中的with关键字使用详解
2016/09/11 Python
Python基于pillow判断图片完整性的方法
2016/09/18 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
Nike德国官网:Nike.com (DE)
2018/11/13 全球购物
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
管理站站长岗位职责
2013/11/27 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
详解MongoDB排序时内存大小限制与创建索引的注意事项
2022/05/06 MongoDB