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

  

本文实例讲述了Python使用re模块实现信息筛选的方法。分享给大家供大家参考,具体如下:

  

  

平时工作中,我们经常会处理大量的元数据(原始数据),而一般的文件编辑器只能一次查询一个关键字,这就难以连续的分析元数据,比如分析产品日志文件(日志),日志可能包括很多信息级别的信息,这些一般是我们不太关心的,我们主要关心的是一些特殊的调试(调试)级别的信息,所以就有必要根据很多关键字筛选出来日志文件中我们所关系的信息,这样筛选出来的日志文件不仅具有连续性,而且易读性会非常好。

  

  

再保险是Python自带的正则表达式库文件,为字符串的匹配筛选提供了极大的便利,本文就是利用再保险来进行日志文件的信息筛选。首先,简单来看一下再保险中的主要函数:

  

1。<代码>编译(模式、旗):对正则表达式进行编译,比检查语法的正确性.flag是编译的标签,这里只介绍DOTALL,表示匹配所有的字符,包括新的行。

        在在在进口再保险   在在在re.compile (' (abc) + ')   re.compile (' (abc) + ')   在在在re.compile(测试)   回溯(最近的电话):   文件“& lt; stdin>”,1号线& lt; module>   NameError:名字“测试”是没有定义的   在在在      之前      

2。<代码>匹配():从目标字符串的开头来判断是否与正则表达式匹配,如果不匹配返回没有,反之,返回匹配对象,包括起始位置,结束位置,字符串内容

        在在在进口再保险   在在在测试=re.compile (' (abc) + ')   在在在test.match (“dabc”)   在在在test.match (“babc”)   & lt; _sre。SRE_Match对象;跨度=(0,4),配=癰abc”比;      之前      

测试是一个以a或b或c开头的正则表达式编译对象,而匹配是从目标字符串的开头进行匹配,所以第一个目标字符串“dabc”不符合正则表达式规则,所以返回没有;第二个目标字符串可以正常匹配输出匹配对象(起始位置,匹配内容),由于匹配每次都从目标字符串的开头进行匹配,所以如果有匹配字符串,其开始位置始终为0。

  

3。<代码>搜索>         在在在进口再保险   在在在测试=re.compile (' (abc) + ')   在在在test.search (“dabc”)   & lt; _sre。SRE_Match对象;跨度=(1、4)匹配=' abc '比;   在在在      之前      

这时用搜索就可以匹配a, b, c开头的字符串了

  

4。<代码> findall>         在在在测试=re.compile (\ w + @163.com)   在在在test.findall (r“alvin@163.comtest1234@163.comnotvalid@gmail.com”)   (“alvin@163.com”、“test1234@163.com”)      之前      

当然,再保险中还有很多其他的函数可供大家使用,大家可以去查阅python官方文档。

  

其次,介绍几个正则表达式常用的符号:

  

1。<强> :表示匹配其前面字符0或多次
  2. <强> :表示匹配新行之外的所有字符
  3.<强> :表示或操作
  4. <强> :表示匹配其前面紧邻字符一次或多次
  5. <强> :表示匹配0或1次

  

其他的正则表达式的表示也可去官网文档查看。

  

最后,上一下这个简单的筛选程序:

        进口再保险   源=' GCM.txt '   目标=' g2s.txt '   #一级筛选   raw_compile=re.compile (r & lt; g2: g2sMessage。* & # 63; & lt;/g2: g2sMessage>”, re.DOTALL)   #二级筛选   messagelevel_compile=re.compile (r & lt; igtLicensing。* | & lt; g2:我害怕。*”,re.DOTALL)   #二级筛选   egmlevel_compile=re.compile (r”IGT_00012E2335AA。*”, re.DOTALL)   def FilterG2SMessage ():   fr=开放(源)   内容=fr.read ()   fr.close ()   f=open(目标,“w”)   g2sItems=raw_compile.findall(内容)   在g2 g2sItems:   iscaredG2S=messagelevel_compile.search (g2)   isCaredEGM=egmlevel_compile.search (g2)   如果iscaredG2S和isCaredEGM:   f.write (g2 + ' \ n ')   其他:   通过   f.close ()   FilterG2SMessage ()      之前      

程序很简单,在筛选的过程中大家可以先分析一下筛选的级别,可以逐级筛选。

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