0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python中re.findall和re.match的使用

我快閉嘴 ? 來源:小杜的芯片驗(yàn)證日記 ? 作者:小杜的芯片驗(yàn)證日 ? 2022-09-15 09:18 ? 次閱讀

小杜今天需要從run.log中提取一些關(guān)鍵信息,又一次使用到了python的re.findall和re.match,也有了一點(diǎn)新的收獲。隨意寫一點(diǎn),當(dāng)作記錄。

我的具體使用場景是需要從數(shù)千行的run.log文件中提取出大括號 { } 中包住的數(shù)據(jù),數(shù)據(jù)有很多個,但格式都很固定,為 ‘hx 或 ‘hxx 的形式,每個數(shù)據(jù)由一個逗號和空格隔開,即:

{'hx, 'hx, 'hxx, 'hx, 'hxx, 'hxx, ...}

但大括號中的數(shù)據(jù)又只有部分固定位是我所需要的。

作為python腳本初學(xué)者,我目前的解決方法是先把大括號和其中的數(shù)據(jù)提取出來,再使用正則表達(dá)式的group將所需的固定位數(shù)據(jù)提取出來。

  • re.findall - 在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個列表,如果有多個匹配模式,則返回元組列表,如果沒有找到匹配的,則返回空列表。

  • re.match - 嘗試從字符串的起始位置匹配,如果模式在字符串中間,則不會匹配成功,match( ) 返回None。

這樣做的是因?yàn)檫@段數(shù)據(jù)并不在行首,且數(shù)據(jù)前面有一長串的打印信息,并不方便直接使用re.match,因此先使用re.findall將所有符合該pattern的數(shù)據(jù)提取出來,再使用re.match配合group提取固定位信息就方便許多(正則好寫很多)。下面是我的兩段python腳本:

import osimport reimport string
file_input = 'path/run.log'file_output = 'path/xxx1.dat'fi = open(file_input, 'r')fo = open(file_output, 'w')
pattern = '...'   #匹配大括號和數(shù)據(jù)的正則表達(dá)式
for line in f1.readlines():  data = re.findall(pattern, line)  fo.write(data)  fo.write('
')
fi.close()fo.close()
import osimport reimport string
file_input = 'path/xxx1.dat'file_output = 'path/xxx2.dat'fi = open(file_input, 'r')fo = open(file_output, 'w')
pattern = '...'   #帶有( )的正則表達(dá)式,匹配固定位數(shù)據(jù)
for line in f1.readlines():  data1 = re.match(pattern, line).group(1)  data2 = re.match(pattern, line).group(3)  data3 = re.match(pattern, line).group(5)  fo.write(data1)  fo.write(data2)  fo.write(data3)  fo.write('
')
fi.close()fo.close()

這樣通過連續(xù)運(yùn)行2次python腳本,再合理使用write( ),就可以提取出我需要的固定位數(shù)據(jù),并且以我需要的格式寫入到輸出的目標(biāo)文件中。

作為新手,寫的很簡易。能不能把這兩個步驟集成到一個python腳本中?有沒有更便捷的實(shí)現(xiàn)方法?還需要繼續(xù)學(xué)習(xí)、思考。


審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4767

    瀏覽量

    84375
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    387

    瀏覽量

    14811

原文標(biāo)題:日常 - re.findall 和 re.match 的簡單使用

文章出處:【微信號:小杜的芯片驗(yàn)證日記,微信公眾號:小杜的芯片驗(yàn)證日記】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    python實(shí)現(xiàn)網(wǎng)頁爬蟲爬取圖片

    re.compile() 可以把正則表達(dá)式編譯成一個正則表達(dá)式對象.re.findall() 方法讀取html 包含 imgre(正則表達(dá)式)的數(shù)據(jù)。運(yùn)行腳本將得到整個頁面包含圖
    發(fā)表于 04-05 15:32

    Python面試必看的10個問題

    的復(fù)制它所包含的對象(修改其中一個,另外一個不會改變){copy模塊的deep.deepcopy()函數(shù)}2、Python里面match()和search()的區(qū)別?答:re模塊
    發(fā)表于 02-28 17:00

    利用Python實(shí)現(xiàn)簡單圖片下載功能

    ; pic_ext' imgre = re.compile(reg) imglist = re.findall(imgre,html) return imglisthtml = getHtml("
    發(fā)表于 09-04 13:49

    初識 Python 正則表達(dá)式

    風(fēng)格的正則表達(dá)式模式。re 模塊使 Python 語言擁有全部的正則表達(dá)式功能。下面通過實(shí)例,一步一步來初步認(rèn)識正則表達(dá)式。比如在一段字符串尋找是否含有某個字符或某些字符,通常我們使用內(nèi)置函數(shù)來實(shí)現(xiàn)
    發(fā)表于 03-17 16:44

    python正則表達(dá)式字符集

    = re.findall('u[abc]v', a)print(findall)# 如果是連續(xù)的字母,數(shù)字可以使用 - 來代替l = re.findall('u[a-c]v', a)print(l)# 取
    發(fā)表于 03-17 16:48

    python正則表達(dá)式數(shù)量詞

    = 'java*&39android##@@python'# 數(shù)量詞findall = re.findall('[a-z]{4,7}', a)print(findall)輸出結(jié)果:[
    發(fā)表于 03-18 16:05

    python正則表達(dá)式的常用函數(shù)

    string還有剩余字符,仍然視為成功。格式:re.match(pattern, string[, flags=0])print(re.match('com','comwww.csdn').group
    發(fā)表于 03-18 16:12

    pythonurllib3和requests的使用

    ; % res.status)# 獲取響應(yīng)內(nèi)容data = res.data.decode("utf-8")# 正則解析并輸出print(re.findall("(.*?)"
    發(fā)表于 03-21 16:08

    索尼RE-3機(jī)芯彩電圖紙

    索尼RE-3機(jī)芯彩電圖紙
    發(fā)表于 01-24 17:30 ?97次下載
    索尼<b class='flag-5'>RE</b>-3機(jī)芯彩電圖紙

    RE46C114 RE46C114是一種電離煙霧探測器AFE

    電子發(fā)燒友網(wǎng)為你提供()RE46C114相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有RE46C114的引腳圖、接線圖、封裝手冊、中文資料、英文資料,RE46C114真值表,RE46C114管腳等資料,
    發(fā)表于 04-18 23:13

    RE46C112 RE46C112是一種電離煙霧探測器AFE

    電子發(fā)燒友網(wǎng)為你提供()RE46C112相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有RE46C112的引腳圖、接線圖、封裝手冊、中文資料、英文資料,RE46C112真值表,RE46C112管腳等資料,
    發(fā)表于 04-18 23:13

    帖子主題:Re:Колибрипрограммированияпрограммирования

    帖子主題:Re:Колибрипрограммированияпрограммирования
    發(fā)表于 05-07 16:47 ?0次下載
    帖子主題:<b class='flag-5'>Re</b>:Колибрипрограммированияпрограммирования

    發(fā)帖主題:Re:Колибри0.7.0

    發(fā)帖主題:Re:Колибри0.7.0
    發(fā)表于 06-08 19:08 ?2次下載
    發(fā)帖主題:<b class='flag-5'>Re</b>:Колибри0.7.0

    Python的十個安全陷阱(二)

    惡意字符串。在 Python ,re.matchre.search 之間有著細(xì)微的區(qū)別,我們將在下面的代碼片段中演示。
    的頭像 發(fā)表于 03-24 16:47 ?1398次閱讀

    輻射RE整改有哪些方法?

    輻射RE整改有哪些方法?|深圳比創(chuàng)達(dá)電子EMC
    的頭像 發(fā)表于 10-31 10:57 ?1616次閱讀
    輻射<b class='flag-5'>RE</b>整改有哪些方法?