gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python使用re模块实现信息筛选的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

背景 。

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

解决方案 。

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

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

?
1
2
3
4
5
6
7
8
>>> 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,反之,返回匹配对象,包括起始位置,结束位置,字符串内容 。

?
1
2
3
4
5
>>> 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会扫描全目标字符串进行正则表达式匹配.

?
1
2
3
4
5
>>> import re
>>> test = re. compile ( '[abc]+' )
>>> test.search( 'dabc' )
<_sre.SRE_Match object ; span = ( 1 , 4 ), match = 'abc' >
>>>

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

4. findall:找出目标字符串中所有的匹配字符串,并以列表的形式返回 。

?
1
2
3
>>> 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次 。

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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不仅仅提供了正则表达式的匹配,而且提供了一些批量处理的函数,比如split,sub,subn等等,这些函数都可以提高我们对文件内容的快速处理,节省时间.

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

原文链接:http://www.cnblogs.com/AlwinXu/p/5634973.html 。

最后此篇关于Python使用re模块实现信息筛选的方法的文章就讲到这里了,如果你想了解更多关于Python使用re模块实现信息筛选的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com