使用重新匹配,如何从文本文件中搜索并获取某些数据?

问题描述

我用过re和match来从文本文件提取某些数据。 但是我在尝试使用类似技术来获取特定数据时遇到了问题。继续卡住。因此,发布我用来获取所需行的代码。 详细信息在下面的代码末尾。 预先谢谢你!

文本文件中的数据

-------------------------------------------------------------------------------------------------------------------------------------
   1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  1  2  3  4  5  6  7
  SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO
 121               192                  175               158                  168                              BLK NO.  101 DYS OFF  17
 CvgoRD X  X  X  X AVPDSMORD X  X  X  X GRBDSMORD X  X  X PIALEXORD X  X  X  X CHALEXORD X  X                   CRD.   72.00 BLK.  58.31
  121= 0910/1255/0901; 192= 0810/1915/1536; 175= 0750/1218/0931; 158= 0730/1240/1359; 168= 0758/1239/1638;      TAFB  245.09 C/O    0.0

代码很抱歉忘记从我的代码添加myDict [key] 已编辑

with open(filename,'r') as f:
    count = 0
    for line in f:
        matchObj = re.match(dashes1,line)
        if matchObj:
            count += 1
            strcount =str(count)
            data = ['','','']
            f.readline()
            f.readline()
            data[0] = f.readline()
            data[1] = f.readline()
            key = "myData"+strcount
            myDict[key] = data
f.close()   



for key in myDict:
    print(key,'->',myDict[key])

我的输出是:

myData1 -> [' 121               192                  175               158                  168                              BLK NO.  101 DYS OFF  17\n',' CvgoRD X  X  X  X AVPDSMORD X  X  X  X GRBDSMORD X  X  X PIALEXORD X  X  X  X CHALEXORD X  X                   CRD.   72.00 BLK.  58.31\n','']

我想在BLK NO之后获取数据。即101,DYS OFF之后的数据为17,以此类推。值72.00和BLK。值58.31。

我不想打印BLK NO。,DYS OFF,CRD。也不是BLK。只是后面的值。 我已经尝试过使用re和match进行相同的方法,但是我被卡住了。 谢谢您的提前帮助!

解决方法

我会保持理智和简单,在将全部内容读入字符串后,只需在此处使用re.findall

inp = """-------------------------------------------------------------------------------------------------------------------------------------
1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  1  2  3  4  5  6  7
SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO
121               192                  175               158                  168                              BLK NO.  101 DYS OFF  17
CVGORD X  X  X  X AVPDSMORD X  X  X  X GRBDSMORD X  X  X PIALEXORD X  X  X  X CHALEXORD X  X                   CRD.   72.00 BLK.  58.31
121= 0910/1255/0901; 192= 0810/1915/1536; 175= 0750/1218/0931; 158= 0730/1240/1359; 168= 0758/1239/1638;      TAFB  245.09 C/O    0.0"""

keys = ["BLK NO\.","DYS OFF","CRD\.","BLK\.","TAFB","C/O"]
regex = "(" + "|".join(keys) + ")"
matches = re.findall(regex + r'\s+(\d+(?:\.\d+)?)',inp)
print(matches)

此打印:

[('BLK NO.','101'),('DYS OFF','17'),('CRD.','72.00'),('BLK.','58.31'),('TAFB','245.09'),('C/O','0.0')]