本文实例讲述了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不仅仅提供了正则表达式的匹配,而且提供了一些批量处理的函数,比如split,sub,subn等等,这些函数都可以提高我们对文件内容的快速处理,节省时间。
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript
正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg
更多关于Python相关内容可查看本站专题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
主要内容:re模块常用方法,flags功能标志位,正则表达式分组,网页信息提取在 Python 爬虫过程中,实现网页元素解析的方法有很多,正则解析只是其中之一,常见的还有 BeautifulSoup 和 lxml,它们都支持网页 HTML 元素的解析操作。本节重点讲解如何使用 re 正则解析模块实现网页信息的提取。 注意:在学习本节知识之前,您应该基本掌握了 Python re 模块的常用方法。 re模块常用方法 1) re.compile() 该方法用来生成正则表达式对象
本文向大家介绍解释Python中“ re”模块的subn()方法?,包括了解释Python中“ re”模块的subn()方法?的使用技巧和注意事项,需要的朋友参考一下 正则表达式是特殊的字符序列,可以使用模式中保留的特殊语法来帮助您匹配或查找其他字符串或字符串集。正则表达式在UNIX世界中被广泛使用。python中的re模块指的是模块正则表达式(RE)。它指定一组与其匹配的字符串或模式。元字符用于
本文向大家介绍python re模块的高级用法详解,包括了python re模块的高级用法详解的使用技巧和注意事项,需要的朋友参考一下 总结 以上所述是小编给大家介绍的python re模块的高级用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!
本文向大家介绍python re模块常见用法例举,包括了python re模块常见用法例举的使用技巧和注意事项,需要的朋友参考一下 我们在用re模块时,根据不同的使用需求,我们要挑选不同的函数来匹配。考虑到大家初学python,在对于方法的学习上,小编推荐以常见的方法为主要学习目标。本篇所带来的是re.sub和re.compile两种函数,下面就这两个部分分别展开讲解,具体内容如下展开。 1、re
本文向大家介绍python 用正则表达式筛选文本信息的实例,包括了python 用正则表达式筛选文本信息的实例的使用技巧和注意事项,需要的朋友参考一下 本文主要介绍如何对多个文本进行读取,并采用正则表达式对其中的信息进行筛选,将筛选出来的信息存写到一个新文本。 文本基础操作 打开文件:open(‘文件名',‘打开方式')>>>file=open(r'C:\Users\yuanlei\Desktop
本文向大家介绍python使用正则筛选信用卡,包括了python使用正则筛选信用卡的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python使用正则筛选信用卡的具体代码,供大家参考,具体内容如下 本文来源于两个简单的题目: 1.判断一对单词是否是" Anagrams " 2.判断信用卡是否合理 判断 Anagramsstrong> anagrams 的百度翻译:由颠倒字母顺序而构成