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 字典(Dictionary)操作详解
Mar 11 Python
python利用正则表达式搜索单词示例代码
Sep 24 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
PIL对上传到Django的图片进行处理并保存的实例
Aug 07 Python
Django学习之文件上传与下载
Oct 06 Python
使用python和pygame制作挡板弹球游戏
Dec 03 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 Python
python文件编写好后如何实践
Jul 07 Python
详解Python直接赋值,深拷贝和浅拷贝
Jul 09 Python
python 实现的车牌识别项目
Jan 25 Python
完美处理python与anaconda环境变量的冲突问题
Apr 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
怎样才能成为PHP高手?学会“懒惰”的编程
2006/12/05 PHP
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
PHP 记录访客的浏览信息方法
2018/01/29 PHP
关于文本框的一些限制控制总结~~
2010/04/15 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
js面向对象的写法
2016/02/19 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
Vue 实例事件简单示例
2019/09/19 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
在Python中使用正则表达式的方法
2015/08/13 Python
Python匹配中文的正则表达式
2016/05/11 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
2018/04/22 Python
python处理数据,存进hive表的方法
2018/07/04 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
python自动识别文本编码格式代码
2019/12/26 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
日语专业个人的求职信
2013/12/03 职场文书
校友会欢迎辞
2014/01/13 职场文书
自荐信需注意事项
2014/01/25 职场文书
庆中秋节主题活动方案
2014/02/03 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书