如何修改正则表达式提取日志时忽略时间戳后的无关文本
问题解决:提取日志中的有效时间戳、run、user和JSON内容
问题场景
日志文件your_file.txt结构如下:
A whole bunch of irrelevant text 2022-12-15 12:45:06 garbage, run: 1, user: james json: [{"value": 30, "error": 8}]
原有正则提取代码会将时间戳后的冗余内容garbage一并捕获,输出结果为:
[('2022-12-15 12:45:06 garbage', '1', 'james', '[{"value": 30, "error": 8}]')]
需要修改正则表达式,让时间戳仅保留2022-12-15 12:45:06这类有效部分。
修改后的代码与正则
核心思路是精准匹配标准日期时间格式,跳过时间戳后到逗号前的冗余内容,不将其纳入捕获组:
import re pat = re.compile( r'(?ms)^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})[^,]+,\s*run:\s*(\S+),\s*user:\s*(.*?)\s*json:\n(.*?)$' ) with open('your_file.txt', 'r') as f_in: print(pat.findall(f_in.read()))
关键修改说明
(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}):精准匹配YYYY-MM-DD HH:MM:SS格式的时间戳,作为第一个捕获组,仅提取有效时间内容。[^,]+:匹配时间戳后到逗号前的所有冗余字符(如garbage),这部分不放在捕获组内,因此不会被包含在输出结果中。- 其余正则逻辑保持不变,确保run编号、用户名和JSON内容的正常提取。
运行后输出结果:
[('2022-12-15 12:45:06', '1', 'james', '[{"value": 30, "error": 8}]')]
内容的提问来源于stack exchange,提问作者DJC
相关产品推荐
相关产品推荐

