正则表达式向后匹配任何内容,直到字符串第一次出现



我正在解析如下格式的日志文件以提取一些信息, 所以我需要TO_BE_MATCHED日志与它之前的所有日志匹配,直到 Tick2,但不幸的是它扩展到时钟周期 1,尽管我使 (?( 不贪婪。

这里有什么建议吗?

import re
if __name__ == "__main__":
text_str ='''0000 :TRACE|####### Tick1 #######   | file1.c:604
0001 :TRACE|log1                     | file2.c:400
0002 :TRACE|log2                     | file3.c:611
0003 :TRACE|####### Tick2 #######    | file1.c:604
0004 :TRACE|log3                     | file2.c:498
0005 :TRACE|log4                     | file3.c:676
0006 :TRACE|TO_BE_MATCHED            | file4.c:555
0007 :TRACE|log5                     | file5.c:676
0008 :TRACE|####### Tick3 #######    | file1.c:604"'''
regex = r"(Tick(d+)(.*?)TO_BE_MATCHED)"
match = re.findall(regex,str(text_str), re.DOTALL)
if(match):
print match[0][0]

===

============================================================================================================================================输出:

Tick1 #######   | file1.c:604
0001 :TRACE|log1                     | file2.c:400
0002 :TRACE|log2                     | file3.c:611
0003 :TRACE|####### Tick2 #######    | file1.c:604
0004 :TRACE|log3                     | file2.c:498
0005 :TRACE|log4                     | file3.c:676
0006 :TRACE|TO_BE_MATCHED
regex = r"(Tick2(.*?)TO_BE_MATCHED)"

如果你试图匹配字符串和 TickN 之间的所有内容TO_BE_MATCHED其中 N 是任何大于 2 的数字;

regex = "r(Tick[2-9]{1,}(.*)TO_BE_MATCHED)"

这个可以完成这项工作,它匹配TickdTO BE MATCHED之间的所有内容,两者之间没有Tickd+

import re
if __name__ == "__main__":
text_str ='''0000 :TRACE|####### Tick1 #######   | file1.c:604
0001 :TRACE|log1                     | file2.c:400
0002 :TRACE|log2                     | file3.c:611
0003 :TRACE|####### Tick2 #######    | file1.c:604
0004 :TRACE|log3                     | file2.c:498
0005 :TRACE|log4                     | file3.c:676
0006 :TRACE|TO_BE_MATCHED            | file4.c:555
0007 :TRACE|log5                     | file5.c:676
0008 :TRACE|####### Tick3 #######    | file1.c:604"'''
regex = r"(Tickd+((?!Tickd+).)*TO_BE_MATCHED)"
match = re.findall(regex,str(text_str), re.DOTALL)
if(match):
print match[0][0]

最新更新