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数据结构之Array用法实例
Oct 09 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
Apr 25 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
Jun 30 Python
Python做文本按行去重的实现方法
Oct 19 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
pandas DataFrame数据转为list的方法
Apr 11 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
python异步存储数据详解
Mar 19 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
Python列表的索引与切片
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实现的Captcha验证码类实例
2014/09/22 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
非主流的textarea自增长实现js代码
2011/12/20 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
VueJs组件prop验证简单介绍
2017/09/12 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
详解原生JS回到顶部
2019/03/25 Javascript
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
vue动态配置模板 'component is'代码
2019/07/04 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
[48:53]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第一场
2014/05/26 DOTA
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
Python用GET方法上传文件
2015/03/10 Python
Python记录详细调用堆栈日志的方法
2015/05/05 Python
python开发之list操作实例分析
2016/02/22 Python
Python 基础之字符串string详解及实例
2017/04/01 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
python中下标和切片的使用方法解析
2019/08/27 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
python Tensor和Array对比分析
2020/01/08 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
团员学习总结的自我评价范文
2013/10/14 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
保护黄河倡议书
2014/05/16 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
民事代理词范文
2015/05/25 职场文书
诉讼和解协议书
2016/03/23 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL