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的Cookie.py模块支持冒号做key的方法
Dec 28 Python
使用Python的Treq on Twisted来进行HTTP压力测试
Apr 16 Python
Python编码爬坑指南(必看)
Jun 10 Python
一文总结学习Python的14张思维导图
Oct 17 Python
Python KMeans聚类问题分析
Feb 23 Python
django用户注册、登录、注销和用户扩展的示例
Mar 19 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 Python
Tensorflow实现部分参数梯度更新操作
Jan 23 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
pytorch中index_select()的用法详解
Jan 06 Python
python日志通过不同的等级打印不同的颜色(示例代码)
Jan 13 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 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
第十一节--重载
2006/11/16 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
JS中获取数据库中的值的方法
2013/07/14 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
常用jQuery代码分享
2015/07/14 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
python中hashlib模块用法示例
2017/10/30 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
python实现的汉诺塔算法示例
2019/10/23 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
COSETTE官网:奢华,每天
2020/03/22 全球购物
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
2016/11/22 面试题
实习指导老师评语
2014/04/26 职场文书
2014年服务员工作总结
2014/11/18 职场文书
收费员岗位职责
2015/02/14 职场文书
在职证明格式样本
2015/06/15 职场文书
教师节表彰会主持词
2015/07/06 职场文书
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android
Python+Tkinter打造签名设计工具
2022/04/01 Python