我有一个很大的文本文件。我需要寻找一个字符串,当我匹配它时,我需要返回几行(在当前行上方),搜索另一个字符串,并从包含第二个字符串的行中提取一些信息。如何在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
你不需要回溯。相反,只要用更聪明的方式向前搜索。如果您先搜索
substr1
,唯一可能发生的问题是在找到substr2
之前会找到更多的substr1
。处理这个问题的方法是在执行过程中不断更新substr1
的匹配。你知道吗从您的描述来看,似乎根本不需要regex。相反,您似乎在寻找简单的字符串包含测试。你知道吗
如果您的行末尾有空格,就像您在给出的示例中所做的那样,您可能希望使用
line.startswith(substr2)
而不是line == substr2
。你知道吗次要修复:
start=1
将使行号以1开头,这可能是您想要的。你知道吗None
进行比较,正确的方法是is not None
而不是!=
。另外,regex.search
返回匹配对象。如果发生了匹配,它将永远是真实的。检查它的惯用方法是甚至没有is not None
。你知道吗相关问题 更多 >
编程相关推荐