匹配一个字符串,该字符串比第一个字符串匹配的另一行高出几行

2024-04-26 11:01:30 发布

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

我有一个很大的文本文件。我需要寻找一个字符串,当我匹配它时,我需要返回几行(在当前行上方),搜索另一个字符串,并从包含第二个字符串的行中提取一些信息。如何在Python中使用regex-match实现这一点? 我正试着做这样的事。你知道吗

substr1 = re.compile("ACT",re.IGNORECASE)
substr2 = re.compile(vector,re.IGNORECASE) 

try:
    with open (filepath, 'rt') as in_file:  
        for linenum, line in enumerate(in_file):   
            if substr2.search(line) != None:
                print(linenum,line)

                    # Code to trace back a few lines to look for substr1

                break
except FileNotFoundError:                   # If the file not found,
    print("pattern not found.")                # print an error message.

这有点像当我匹配第一个字符串并查找第二个字符串的第一个匹配项时,我想反向读取它。行数不同,因此我认为不能使用“出列”选项。我对Python完全陌生。 感谢您的帮助,谢谢! 我正在添加一个我正在阅读的示例日志文件。你知道吗

X 123  
X 1234  
X 12345  
Vector1  
----  
-----  
-----  
X 1231  
X 12344  
X 123456  
vector a  
vector b  
vector c  
vector d  
-------  
-------  
Vector  
----  
-----  
-----  
X 1233  
X 12345  
X 123451  
Vector2

字符串1:Vector 字符串2:X

输出应该是X 123456


Tags: to字符串inreforlinenotfile
1条回答
网友
1楼 · 发布于 2024-04-26 11:01:30

你不需要回溯。相反,只要用更聪明的方式向前搜索。如果您先搜索substr1,唯一可能发生的问题是在找到substr2之前会找到更多的substr1。处理这个问题的方法是在执行过程中不断更新substr1的匹配。你知道吗

从您的描述来看,似乎根本不需要regex。相反,您似乎在寻找简单的字符串包含测试。你知道吗

substr1 = 'X'
substr2 = 'Vector'

with open (filepath, 'rt') as in_file:
    matched = None
    for linenum, line in enumerate(in_file, start=1):
        if substr1 in line:
            matched = line
        elif matched and line == substr2:
            # Process the second string
            print(matched)
            break

如果您的行末尾有空格,就像您在给出的示例中所做的那样,您可能希望使用line.startswith(substr2)而不是line == substr2。你知道吗

次要修复:

  • start=1将使行号以1开头,这可能是您想要的。你知道吗
  • 如果要与None进行比较,正确的方法是is not None而不是!=。另外,regex.search返回匹配对象。如果发生了匹配,它将永远是真实的。检查它的惯用方法是甚至没有is not None。你知道吗

相关问题 更多 >