如何用Python正则匹配日志中「星期 月份 日期 时间戳 年份」格式串
Python正则匹配完整日志时间格式方案
匹配完整时间格式的正则表达式
要匹配「星期 月份 日期 时间戳 年份」(如Mon Mar 16 13:05:14 2020)的完整格式,可以使用以下正则:
\b(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(0?[1-9]|[12]\d|3[01])\s+([01]?\d|2[0-3]):([0-5]\d):([0-5]\d)\s+(19|20)\d{2}\b
正则各部分说明
(Mon|Tue|Wed|Thu|Fri|Sat|Sun):匹配所有英文星期缩写(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec):匹配所有英文月份缩写(0?[1-9]|[12]\d|3[01]):匹配1-31的日期,支持带前导零或不带([01]?\d|2[0-3]):([0-5]\d):([0-5]\d):匹配00:00:00到23:59:59的时分秒格式(19|20)\d{2}:匹配19xx或20xx的年份
关联日志内容的实现思路
如果要提取时间戳对应的关联日志内容(比如时间所在行之后到日志边界的内容),可以结合正则和Python文件读取逻辑:
- 匹配到完整时间戳后,记录其位置
- 读取后续内容直到遇到日志边界(如示例中的
EN 194或空行) - 将时间戳与对应日志内容关联输出
示例代码片段:
import re # 编译正则表达式 log_time_pattern = re.compile(r'\b(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(0?[1-9]|[12]\d|3[01])\s+([01]?\d|2[0-3]):([0-5]\d):([0-5]\d)\s+(19|20)\d{2}\b') with open('your_log_file.log', 'r') as log_file: log_content = log_file.read() # 查找所有匹配的时间戳 time_matches = log_time_pattern.finditer(log_content) for match in time_matches: timestamp = match.group() # 提取时间戳之后的关联内容,直到遇到EN标记或日志结尾 start_pos = match.end() end_pos = log_content.find('EN ', start_pos) if end_pos == -1: end_pos = len(log_content) related_log = log_content[start_pos:end_pos].strip() print(f"匹配到时间戳: {timestamp}") print(f"关联日志内容:\n{related_log}\n")
补充优化
- 如果日志中星期/月份缩写存在大小写变体(如
mon或MAR),可以在正则开头添加(?i)开启不区分大小写模式:(?i)\b(mon|tue|...)\b - 若日期前的空格数量不固定,可将
\s+替换为\s*提升匹配灵活性
内容的提问来源于stack exchange,提问作者Praveen Kumar S
相关产品推荐
相关产品推荐

