首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用re和matching,我如何从文本文件中搜索和获取特定的数据?

使用re和matching,我如何从文本文件中搜索和获取特定的数据?
EN

Stack Overflow用户
提问于 2020-11-12 07:47:55
回答 1查看 49关注 0票数 1

我使用了re和matching从文本文件中提取某些数据。但我在使用类似技术获取特定数据时遇到了问题。继续卡住。所以,发布我用来获得所需行的代码。详细信息位于下面代码的末尾。提前谢谢你!

文本文件中的数据:

代码语言:javascript
运行
复制
-------------------------------------------------------------------------------------------------------------------------------------
   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

代码:抱歉忘记从我的代码编辑中添加myDictkey

代码语言:javascript
运行
复制
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])

我的产出是:

代码语言:javascript
运行
复制
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否之后的数据。这是101,数据后的DYS关闭是17,以此类推的CRD。值为72.00和BLK。价值58.31。

我不想打印BLK NO.,DYS,CRD。也不是BLK。只是他们之后的价值。我尝试过同样的方法,使用re和匹配,但我被卡住了。谢谢您的帮助提前!

EN

回答 1

Stack Overflow用户

发布于 2020-11-12 07:54:31

在将整个内容读入字符串之后,我将保持一切正常和简单,只需在这里使用re.findall

代码语言:javascript
运行
复制
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)

这些指纹:

代码语言:javascript
运行
复制
[('BLK NO.', '101'), ('DYS OFF', '17'), ('CRD.', '72.00'), ('BLK.', '58.31'),
 ('TAFB', '245.09'), ('C/O', '0.0')]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64799808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档