如何给出开始时间和结束时间的时间戳正则表达式?

时间:2017-06-08 00:37:12

标签: python regex

我正在从一个巨大的日志文件中提取感兴趣的日志行。 请注意,我根本不熟悉python。

日志行全部从时间戳开始,如

09:00:00.648711172 [Info  ] [....]

我希望将它与特定的时间段相匹配,比如从09:00到09:30,我想出了以下解决方案:

r'^(09:[012][0-9]|30)

问题是这不适用于一般案例,比如说我们获得start_timeend_time,我该如何进行匹配?

3 个答案:

答案 0 :(得分:2)

如果不能为不同的start_timeend_time构建正则表达式模式,您可以捕获并解析时间并将其与实际时间范围进行比较:

import datetime

start_time = datetime.time(9, 00)
end_time = datetime.time(9, 30)

log_line = "09:00:00.648711172 [Info  ] [....]"

log_time = datetime.datetime.strptime(log_line[:log_line.find(".")], "%H:%M:%S").time()
if start_time <= log_time <= end_time:
    print("Woo, we've found a match: {}".format(log_line))
else:
    print("Close, but no cigar with the line: {}".format(log_line))

答案 1 :(得分:0)

在这种情况下,只有正则表达式对你没什么帮助。相反,您可以尝试使用正则表达式获取小时,分钟和秒的值,然后进行一些计算(类似Bundle args = getArguments(); Incidencia incidencia = args.getParcelable("yourKey"); )以确定它是否在范围内。

答案 2 :(得分:0)

正则表达式匹配日期从09:00:00到09:30:00的任何一个条目,并且不匹配任何其他条目:

log_regex = re.compile(r'09:(([0-2]/d{1}):([0-5]/d{1}|60))|30:00')

您希望匹配此正则表达式的所有匹配项:

log_regex.findAll(your_string_variable)