Python:搜索文本fi

2024-10-04 11:30:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下格式的文本文件:

XXXX Testing123
    YYYY hellow
    ZZZZ worldd
AAAA Testing456
    BBBB heyyy
    YYYY YoYo
AAAA Testing789
    CCCC hezzz
    YYYY hellow

以下是我的文本搜索代码:

^{pr2}$

上面打印出:

XXXX Testing123
   YYYY YoYo

但我想要的是:

XXXX Testing123
  YYYY hellow

知道如何在Python中搜索这个吗?在

基本上,我需要首先搜索XXXX,然后在这个部分下输入YYYY字段。如果在XXXX下找不到YYYY,则返回not found,而不是继续查找。在


Tags: 格式cccc文本文件aaaaxxxxyoyoyyyybbbb
3条回答

您可以制作一个标志来显示您是否在“XXXX”部分。如果它在,则使标志=1,否则使标志=0。另外,你需要区分两种线。在

a = "XXXX"
b = "\t" + "YYYY"
flag = 0
for line in open('test.txt'):
    if line[0] == '\t':
        if flag and b in line:
            print line,
    else:        
        if a in line:
            flag = 1
            print line,
        else:
            flag = 0

给定此文件:

XXXX Testing123
    YYYY hellow
    ZZZZ worldd
AAAA Testing456
    BBBB heyyy
    YYYY YoYo

可以对mmap文件使用regex:

^{pr2}$

如果只需要YYYY组,请拆分正则表达式:

^{3}$

如果要丢失前导空格,请使用:

    for m in re.finditer(r'^(XXXX.*?)^\s+(YYYY.*?)$', mm, flags=re.M | re.S):

如果它是一个完全在内存中的文件,您可以跳过mmap,只需使用f.read()将该文件读入内存


通过您的注释,您可以修改regex以更准确地捕获您要查找的内容。在

给定文件:

XXXX Testing123
    YYYY hellow
    ZZZZ worldd
AAAA Testing456
    BBBB heyyy
    YYYY YoYo
XXXX Testing123
    ZZZZ worldd
AAAA Testing456
    BBBB heyyy
    YYYY YoYo
XXXX Testing123 2
    YYYY hellow
    ZZZZ worldd

Demo regex

在Python中:

with open(fn, 'r+') as f:
    mm=mmap.mmap(f.fileno(), 0)
    for m in re.finditer(r'^XXXX.*\n^\s+(YYYY.*)', mm, flags=re.M ):
        print m.group(1)

印刷品:

YYYY hellow
YYYY hellow

您还可以使用两个元素deque,并测试每行是否符合所需条件:

^{8}$

印刷品:

deque(['XXXX Testing123\n', '    YYYY hellow\n'], maxlen=2)
deque(['XXXX Testing123 2\n', '    YYYY hellow\n'], maxlen=2)

如果这些是文本文件中的行,可以按如下方式进行匹配:

import re
print (re.findall(r'XXXX T\w+', 'XXXX Testing123 any text here'))
print (re.findall(r'YYYY h\w+', 'YYYY hellow any text here'))

输出匹配:

^{pr2}$

相关问题 更多 >