You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Regex匹配结构化日志提取时间、用户、标签及多行关联内容

Python正则匹配多行日志记录解决方案

问题原因

  1. Python re模块默认配置下,.元字符不匹配换行符,原有正则的末尾(.*)只能捕获正文的第一行内容
  2. 未明确多行正文的终止边界,无法判定当前记录的正文何时结束

正确实现代码

import re

text2 = """2021-01-01 10:00:05 - Surname1 Name1 (Comment)
Blablabla
Blabla
2021-01-01 23:00:05 - Surname2 SurnameBis Name2 (WorkNotes)
What?
I don't know?
Can you be clear?
2021-01-02 03:00:05 - Surname1 Name1 (Comment)
Blablabla!"""

# 正则模式 + re.DOTALL 标志
pattern = r"(\d{4}-\d{2}-\d{2})\s(\d{2}:\d{2}:\d{2})\s-\s(.*?)\((.*?)\)\n(.*?)(?=\n\d{4}-\d{2}-\d{2}|\Z)"
LangTag = re.findall(pattern, text2, flags=re.DOTALL)

# 可选操作:清除姓名字段末尾多余的空格
LangTag = [(date, time, name.strip(), tag, content) for date,time,name,tag,content in LangTag]

print(LangTag)

关键说明

  • 不需要修改原文本的换行符,所有原换行都会保留在最后一个正文分组中,满足后续业务使用需求
  • 正向预查(?=\n\d{4}-\d{2}-\d{2}|\Z)属于零宽匹配,不会消耗下一条记录的开头内容,保证每条记录都能被完整匹配
  • 所有.*?使用非贪婪匹配,避免分组内容溢出到后续字段
    运行后输出的结构与需求完全一致。

内容的提问来源于stack exchange,提问作者Renaud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:09:01