Python使用re模块实现信息筛选的方法

 更新时间:2018年04月29日 11:41:58   作者:徐文  
这篇文章主要介绍了Python使用re模块实现信息筛选的方法,结合实例形式分析了Python正则re模块进行信息筛选操作的相关实现技巧及相关函数使用技巧,需要的朋友可以参考下

本文实例讲述了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等等,这些函数都可以提高我们对文件内容的快速处理,节省时间。

PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:

JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript

正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg

更多关于Python相关内容可查看本站专题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • 手把手教你python实现SVM算法

    手把手教你python实现SVM算法

    这篇文章主要为大家详细介绍了手把手教你python实现SVM算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • PyTorch详解经典网络种含并行连结的网络GoogLeNet实现流程

    PyTorch详解经典网络种含并行连结的网络GoogLeNet实现流程

    今天小编就为大家分享一篇Pytorch实现GoogLeNet的方法,GoogLeNet提出了一个名为“Inception”的深度卷积神经网结构,其目标是将分类、识别ILSVRC14数据集的技术水平提高一个层次。这一结构的主要特征是对网络内部计算资源的利用进行了优化
    2022-05-05
  • Pandas根据条件实现替换列中的值

    Pandas根据条件实现替换列中的值

    在使用Pandas的Python中,DataFrame列中的值可以通过使用各种内置函数根据条件进行替换,本文主要来和大家讨论在Pandas中用条件替换数据集列中的值的各种方法,希望对大家有所帮助
    2024-01-01
  • python基础学习之组织文件

    python基础学习之组织文件

    今天带大家复习python基础知识,此文章将要介绍如何组织文件,既拷贝,移动等,文中有非常详细的代码示例,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • 教你用python控制安卓手机

    教你用python控制安卓手机

    不久前,我在思考如何通过向好友发送几分钟的垃圾邮件来惹恼我的朋友,而在做一些研究的过程中,我遇到了Android调试桥.在本快速指南中,我将向您展示如何使用Python与之交互以及如何创建2个快速脚本.需要的朋友可以参考下
    2021-05-05
  • 解决pycharm19.3.3安装pyqt5找不到designer.exe和pyuic.exe的问题

    解决pycharm19.3.3安装pyqt5找不到designer.exe和pyuic.exe的问题

    这篇文章给大家介绍了pycharm19.3.3安装pyqt5&pyqt5-tools后找不到designer.exe和pyuic.exe以及配置QTDesigner和PyUIC的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-04-04
  • 基于Python Shell获取hostname和fqdn释疑

    基于Python Shell获取hostname和fqdn释疑

    一直以来被linux的hostname和fqdn(Fully Qualified Domain Name)困惑着,今天通过脚本之家平台把它们使用细节弄清分享给大家
    2016-01-01
  • django-crontab 定时执行任务方法的实现

    django-crontab 定时执行任务方法的实现

    这篇文章主要介绍了django-crontab 定时执行任务方法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 通过mod_python配置运行在Apache上的Django框架

    通过mod_python配置运行在Apache上的Django框架

    这篇文章主要介绍了通过mod_python配置运行在Apache上的Django框架,Django是最具人气的Python web开发框架,需要的朋友可以参考下
    2015-07-07
  • Python高阶函数与函数式编程概念及使用实例探究

    Python高阶函数与函数式编程概念及使用实例探究

    这篇文章主要为大家介绍了Python高阶函数与函数式编程概念及使用实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论