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连接MySQL数据库实例分析
May 12 Python
Python闭包的两个注意事项(推荐)
Mar 20 Python
深入浅出学习python装饰器
Sep 29 Python
详解Python map函数及Python map()函数的用法
Nov 16 Python
python实现图书管理系统
Mar 12 Python
python3中函数参数的四种简单用法
Jul 09 Python
python按照多个条件排序的方法
Feb 08 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
Mar 30 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
Python基于字典实现switch case函数调用
Jul 22 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 Python
详解Python requests模块
Jun 21 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编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
javascript等号运算符使用详解
2015/04/16 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
微信小程序中this.data与this.setData的区别详解
2018/09/17 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
Django框架创建项目的方法入门教程
2019/11/04 Python
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
优秀班集体获奖感言
2014/02/03 职场文书
保密工作实施方案
2014/02/24 职场文书
生日礼品店创业计划书范文
2014/03/21 职场文书
自强之星事迹材料
2014/05/12 职场文书
材料物理专业求职信
2014/09/01 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
好媳妇事迹材料
2014/12/24 职场文书
房地产公司财务总监岗位职责
2015/04/03 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS