使用python的re模塊匹配文本里固定字符串並取出字符串后的數字


這次遇到的問題是,我將數據(data)存在5個不同的文件夾下,這五個文件夾又在同一個文件夾下。

我想要可以給一個文件夾的輸入,就可以便利此文件夾下的每一個文件夾里的data文件,並取出data中固定字符串后的一串數字。

data里內容看起來是這樣:

error of kalman is 0.5546175255599425
error of sma is 0.5615765774353265
error of median is 0.5704280901194125
error of kalman + sma is 0.5435610429446063

需要要取出最后一行的error of kalman + sma is后的數字,則需要用到re庫:

下面代碼的第八行就是正則表達式,其中:

(?<=error of kalman \+ sma is)的意思是如果error of kalman + sma is出現在字符串前面才做匹配,稱作正向后視斷言。
其中加號前面需要加\,否則加號會被認為是正則表達式運算符。
\s*\d*\.\d*這句中\s是空格,\d是十進制數字,\.就是小數點。因為沒有辦法一次把這個小數取出來,所以需要把這個數分為三部分取。
*代表對它前面的正則式匹配0到任意次重復, 盡量多的匹配字符串。
 1 import os
 2 import re
 3 #coding:utf8
 4 
 5 dir_path='C:/Users/你的用戶名/OneDrive/文檔/thesis/plots/localization_result'
 6 
 7 dirs= os.listdir(dir_path)
 8 p = re.compile(r'(?<=error of kalman \+ sma is)\s*\d*\.\d*')
 9 
10 out = []
11 for dir in dirs:
12     file_dir = dir_path + '/' + dir + '/data'
13     with open(file_dir, encoding='utf-8') as file:
14         for line in file.readlines():
15             s = p.findall(line)
16             if s:
17                 out.append(eval(s[0]))
18 print(dirs)
19 print(out)

 最后的結果是

['0252', '0514', '124', '133', '235']
[0.4874211675211633, 0.41016961492770837, 0.5435610429446063, 0.5860694118921476, 0.7477642384332055]

 參考:https://docs.python.org/zh-cn/3/library/re.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM