最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用re模塊實(shí)現(xiàn)信息篩選的方法

 更新時(shí)間:2018年04月29日 11:41:58   作者:徐文  
這篇文章主要介紹了Python使用re模塊實(shí)現(xiàn)信息篩選的方法,結(jié)合實(shí)例形式分析了Python正則re模塊進(jìn)行信息篩選操作的相關(guān)實(shí)現(xiàn)技巧及相關(guān)函數(shù)使用技巧,需要的朋友可以參考下

本文實(shí)例講述了Python使用re模塊實(shí)現(xiàn)信息篩選的方法。分享給大家供大家參考,具體如下:

背景

平時(shí)工作中,我們經(jīng)常會(huì)處理大量的元數(shù)據(jù)(Raw Data),而一般的文件編輯器只能一次查詢一個(gè)關(guān)鍵字,這就難以連續(xù)的分析元數(shù)據(jù),比如分析產(chǎn)品日志文件(log),日志可能包括很多information級(jí)別的信息,這些一般是我們不太關(guān)心的,我們主要關(guān)心的是一些特殊的調(diào)試(Debug)級(jí)別的信息,所以就有必要根據(jù)很多關(guān)鍵字篩選出來日志文件中我們所關(guān)系的信息,這樣篩選出來的日志文件不僅具有連續(xù)性,而且易讀性會(huì)非常好。

解決方案

re是Python自帶的正則表達(dá)式庫文件,為字符串的匹配篩選提供了極大的便利,本文就是利用re來進(jìn)行日志文件的信息篩選。首先,簡單來看一下re中的主要函數(shù):

1. Compile(pattern, flag):對(duì)正則表達(dá)式進(jìn)行編譯,比檢查語法的正確性。flag是編譯的標(biāo)簽,這里只介紹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(): 從目標(biāo)字符串的開頭來判斷是否與正則表達(dá)式匹配,如果不匹配返回None,反之,返回匹配對(duì)象,包括起始位置,結(jié)束位置,字符串內(nèi)容

>>> import re
>>> test = re.compile('[abc]+')
>>> test.match('dabc')
>>> test.match('babc')
<_sre.SRE_Match object; span=(0, 4), match='babc'>

test是一個(gè)以a或b或c開頭的正則表達(dá)式編譯對(duì)象,而match是從目標(biāo)字符串的開頭進(jìn)行匹配,所以第一個(gè)目標(biāo)字符串“dabc”不符合正則表達(dá)式規(guī)則,所以返回None;第二個(gè)目標(biāo)字符串可以正常匹配輸出匹配對(duì)象(起始位置,匹配內(nèi)容),由于match每次都從目標(biāo)字符串的開頭進(jìn)行匹配,所以如果有匹配字符串,其開始位置始終為0.

3. search:與match功能相近,search會(huì)掃描全目標(biāo)字符串進(jìn)行正則表達(dá)式匹配。

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

這時(shí)用search就可以匹配a,b,c開頭的字符串了

4. findall:找出目標(biāo)字符串中所有的匹配字符串,并以列表的形式返回

>>> test = re.compile('\w+@163.com')
>>> test.findall(r"alvin@163.comtest1234@163.comnotvalid@gmail.com")
['alvin@163.com', 'test1234@163.com']

當(dāng)然,re中還有很多其他的函數(shù)可供大家使用,大家可以去查閱python官方文檔。

其次,介紹幾個(gè)正則表達(dá)式常用的符號(hào):

1. *: 表示匹配其前面字符0或多次
2. .: 表示匹配新行之外的所有字符
3. |: 表示或操作
4. +:表示匹配其前面緊鄰字符一次或多次
5. ?: 表示匹配0或1次

其他的正則表達(dá)式的表示也可去官網(wǎng)文檔查看。

最后,上一下這個(gè)簡單的篩選程序:

import re
source = 'GCM.txt'
target = 'g2s.txt'
#一級(jí)篩選
raw_compile = re.compile(r"<g2s:g2sMessage.*?</g2s:g2sMessage>",re.DOTALL)
#二級(jí)篩選
messagelevel_compile = re.compile(r"<igtLicensing.*|<g2s:idReader.*",re.DOTALL)
#二級(jí)篩選
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()

程序很簡單,在篩選的過程中大家可以先分析一下篩選的級(jí)別,可以逐級(jí)篩選。

總結(jié):

re不僅僅提供了正則表達(dá)式的匹配,而且提供了一些批量處理的函數(shù),比如splitsub,subn等等,這些函數(shù)都可以提高我們對(duì)文件內(nèi)容的快速處理,節(jié)省時(shí)間。

PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:

JavaScript正則表達(dá)式在線測試工具:
http://tools.jb51.net/regex/javascript

正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python正則表達(dá)式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 手把手教你python實(shí)現(xiàn)SVM算法

    手把手教你python實(shí)現(xiàn)SVM算法

    這篇文章主要為大家詳細(xì)介紹了手把手教你python實(shí)現(xiàn)SVM算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • PyTorch詳解經(jīng)典網(wǎng)絡(luò)種含并行連結(jié)的網(wǎng)絡(luò)GoogLeNet實(shí)現(xiàn)流程

    PyTorch詳解經(jīng)典網(wǎng)絡(luò)種含并行連結(jié)的網(wǎng)絡(luò)GoogLeNet實(shí)現(xiàn)流程

    今天小編就為大家分享一篇Pytorch實(shí)現(xiàn)GoogLeNet的方法,GoogLeNet提出了一個(gè)名為“Inception”的深度卷積神經(jīng)網(wǎng)結(jié)構(gòu),其目標(biāo)是將分類、識(shí)別ILSVRC14數(shù)據(jù)集的技術(shù)水平提高一個(gè)層次。這一結(jié)構(gòu)的主要特征是對(duì)網(wǎng)絡(luò)內(nèi)部計(jì)算資源的利用進(jìn)行了優(yōu)化
    2022-05-05
  • Pandas根據(jù)條件實(shí)現(xiàn)替換列中的值

    Pandas根據(jù)條件實(shí)現(xiàn)替換列中的值

    在使用Pandas的Python中,DataFrame列中的值可以通過使用各種內(nèi)置函數(shù)根據(jù)條件進(jìn)行替換,本文主要來和大家討論在Pandas中用條件替換數(shù)據(jù)集列中的值的各種方法,希望對(duì)大家有所幫助
    2024-01-01
  • python基礎(chǔ)學(xué)習(xí)之組織文件

    python基礎(chǔ)學(xué)習(xí)之組織文件

    今天帶大家復(fù)習(xí)python基礎(chǔ)知識(shí),此文章將要介紹如何組織文件,既拷貝,移動(dòng)等,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • 教你用python控制安卓手機(jī)

    教你用python控制安卓手機(jī)

    不久前,我在思考如何通過向好友發(fā)送幾分鐘的垃圾郵件來惹惱我的朋友,而在做一些研究的過程中,我遇到了Android調(diào)試橋.在本快速指南中,我將向您展示如何使用Python與之交互以及如何創(chuàng)建2個(gè)快速腳本.需要的朋友可以參考下
    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的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-04-04
  • 基于Python Shell獲取hostname和fqdn釋疑

    基于Python Shell獲取hostname和fqdn釋疑

    一直以來被linux的hostname和fqdn(Fully Qualified Domain Name)困惑著,今天通過腳本之家平臺(tái)把它們使用細(xì)節(jié)弄清分享給大家
    2016-01-01
  • django-crontab 定時(shí)執(zhí)行任務(wù)方法的實(shí)現(xiàn)

    django-crontab 定時(shí)執(zhí)行任務(wù)方法的實(shí)現(xiàn)

    這篇文章主要介紹了django-crontab 定時(shí)執(zhí)行任務(wù)方法的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 通過mod_python配置運(yùn)行在Apache上的Django框架

    通過mod_python配置運(yùn)行在Apache上的Django框架

    這篇文章主要介紹了通過mod_python配置運(yùn)行在Apache上的Django框架,Django是最具人氣的Python web開發(fā)框架,需要的朋友可以參考下
    2015-07-07
  • Python高階函數(shù)與函數(shù)式編程概念及使用實(shí)例探究

    Python高階函數(shù)與函數(shù)式編程概念及使用實(shí)例探究

    這篇文章主要為大家介紹了Python高階函數(shù)與函數(shù)式編程概念及使用實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12

最新評(píng)論

探索| 米易县| 吉木萨尔县| 晋宁县| 黄石市| 桐城市| 阿城市| 蓬溪县| 清水河县| 姜堰市| 谢通门县| 武邑县| 台南县| 广州市| 陕西省| 安塞县| 瑞金市| 鄂伦春自治旗| 油尖旺区| 温泉县| 当涂县| 渝北区| 松原市| 云安县| 彭州市| 新民市| 陇南市| 泸溪县| 青铜峡市| 衡水市| 诏安县| 大城县| 浦城县| 华蓥市| 萍乡市| 西安市| 疏附县| 鄂伦春自治旗| 惠来县| 巧家县| 阳原县|