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脚本实现统计日志文件中的ip访问次数代码分享
Aug 06 Python
在Python的Flask框架中使用模版的入门教程
Apr 20 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
Jun 26 Python
Python使用微信SDK实现的微信支付功能示例
Jun 30 Python
Sanic框架异常处理与中间件操作实例分析
Jul 16 Python
Python+OpenCV实现图像融合的原理及代码
Dec 03 Python
python最小生成树kruskal与prim算法详解
Jan 17 Python
python函数的万能参数传参详解
Jul 26 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
opencv python在视屏上截图功能的实现
Mar 05 Python
Python如何快速找到多个字典中的公共键(key)
Apr 29 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代码
2012/07/14 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
php车辆违章查询数据示例
2016/10/14 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
关于PHP定时发送服务的解决办法
2017/04/23 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
判断及设置浏览器全屏模式
2014/04/20 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
Python脚本实现集群检测和管理功能
2015/03/06 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
2017/11/08 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
2017/11/14 Python
使用python 和 lint 删除项目无用资源的方法
2017/12/20 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
python打开windows应用程序的实例
2019/06/28 Python
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
创建索引时需要注意的事项
2013/05/13 面试题
Linux文件系统类型
2012/02/15 面试题
店长助理岗位职责
2013/12/13 职场文书
毕业班联欢会主持词
2014/03/27 职场文书
调研座谈会发言材料
2014/08/23 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers
德劲DE1102数字调谐收音机机评
2022/04/07 无线电