国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python使用re模塊實現信息篩選的方法

2020-01-04 15:17:26
字體:
來源:轉載
供稿:網友

本文實例講述了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 resource = '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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永昌县| 西青区| 旌德县| 商洛市| 大城县| 政和县| 桃园市| 修水县| 志丹县| 涿鹿县| 中牟县| 马关县| 定边县| 弋阳县| 鄂伦春自治旗| 泰州市| 龙海市| 武清区| 龙南县| 麟游县| 张家港市| 八宿县| 河间市| 辽中县| 赤水市| 克什克腾旗| 九江县| 平和县| 南溪县| 淮滨县| 镇赉县| 抚松县| 扎赉特旗| 丽水市| 阿克| 雅江县| 灵武市| 邳州市| 武陟县| 巫溪县| 德阳市|