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 相关文章推荐
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
python快速查找算法应用实例
Sep 26 Python
Django 跨域请求处理的示例代码
May 02 Python
对Python发送带header的http请求方法详解
Jan 02 Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 Python
python中 * 的用法详解
Jul 10 Python
python中的列表与元组的使用
Aug 08 Python
用Python解数独的方法示例
Oct 24 Python
python Jupyter运行时间实例过程解析
Dec 13 Python
在PyCharm中实现添加快捷模块
Feb 12 Python
基于python检查矩阵计算结果
May 21 Python
python中关于数据类型的学习笔记
Jul 19 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生成可点击刷新的验证码简单示例
2016/05/13 PHP
一个简单的php路由类
2016/05/29 PHP
php自定义时间转换函数示例
2016/12/07 PHP
php+ajax+json 详解及实例代码
2016/12/12 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
jQuery Mobile框架中的表单组件基础使用教程
2016/05/17 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
2017/03/17 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
python爬取各类文档方法归类汇总
2018/03/22 Python
浅谈python配置与使用OpenCV踩的一些坑
2018/04/02 Python
Python flask框架post接口调用示例
2019/07/03 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
英国电气世界:Electrical World
2019/09/08 全球购物
大学生大二自我鉴定
2013/10/28 职场文书
优秀党支部事迹材料
2014/01/14 职场文书
运动会广播稿500字
2014/01/28 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
python单元测试之pytest的使用
2021/06/07 Python
python中的random模块和相关函数详解
2022/04/22 Python