一个接一个地匹配多个行

时间:2017-10-25 13:52:10

标签: python regex python-2.7

我有一个日志文件,其中包含以下对中的数据:

[Connectivity]  07.07 11:35:08
[REGISTERED]

因此我想找到每一对这样的线条并仅打印日期和时间。 我的示例txt文件是:

[Connectivity]  07.07 11:35:08
[REGISTERED]

#other stuff in the log#

[Connectivity]  07.07 17:20:22
[REGISTERED]

#more stuff in the log#

[Connectivity]  07.07 19:10:29
[REGISTERED]

我想要打印的内容应该是

1: 07.07 11:35:08
2: 07.07 17:20:22
3: 07.07 19:10:29

当然,每次使用另一天的日志文件时,日期和时间都会有所不同。我假设我应该使用RE来完成这个,但是我不能让我的代码查找两个组合的行,只有一行。

我厌倦了粗糙的正则表达式,但它让我失望了:

re.findall('(\\[Connectivity\\])(\s)(\d\d\\.\d\d\s\d\d:\d\d:\d\d)\s\\[REGISTERED\\]', line, re.MULTILINE)

有谁知道如何做到这一点?

2 个答案:

答案 0 :(得分:0)

>>> re.findall(r'\[Connectivity\]\s+(\d{2}\.\d{2} \d{2}:\d{2}:\d{2})\s+\[REGISTERED]', line, re.MULTILINE)
['07.07 11:35:08', '07.07 17:20:22', '07.07 19:10:29']

答案 1 :(得分:0)

你可以试试这个:

import re
data = [i.strip('\n') for i in open('log.txt')]
final_results = [re.sub("\[Connectivity\]\s", '', data[i]) for i in range(len(data)-1) if i.startswith("[Connectivity]") and data[i+1] == "[REGISTERED]"]
 new_final_data = ["{}: {}".format(i+1, a) for i, a in enumerate(final_results)]