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

如何使用正则表达式拆分单行合并打印的多条程序日志?

解决方案

你可以通过正向预查匹配日志边界的方式调整正则,核心逻辑是:每条日志以固定格式的时间戳开头,结束位置为下一个时间戳的起始位置(或整个字符串末尾)。

调整后的代码示例

import re

string = "2021-08-04:12.55.51.965438904: bla bla bla bla2021-08-04:12.55.51.965493516: bla bla bla bla2021-08-04:12.55.52.073093436: bla bla bla bla"

# 正则说明:
# \d{4}-\d{2}-\d{2}:\d{2}\.\d{2}\.\d{2}\.\d+ 匹配固定格式的时间戳,注意转义点号避免匹配任意字符
# : .*? 匹配时间戳后的冒号、空格,以及后续的日志内容(非贪婪模式防止过度匹配)
# (?=\d{4}-\d{2}-\d{2}:|$) 正向预查,断言下一个位置是新的时间戳开头,或者字符串结束
reg_exp = re.compile(r"\d{4}-\d{2}-\d{2}:\d{2}\.\d{2}\.\d{2}\.\d+:.*?(?=\d{4}-\d{2}-\d{2}:|$)", re.DOTALL)
for match in reg_exp.finditer(string):
    print(match.group())

输出结果

2021-08-04:12.55.51.965438904: bla bla bla bla
2021-08-04:12.55.51.965493516: bla bla bla bla
2021-08-04:12.55.52.073093436: bla bla bla bla

补充说明

  • 原代码的正则仅匹配了时间戳部分,没有覆盖后续日志内容,也没有处理多条日志的边界问题,所以只能单独提取时间戳
  • 正则中加了re.DOTALL标记是为了适配日志内容中存在换行符的场景,如果你的日志内容绝对不会出现换行,可以去掉该标记
  • 时间戳的匹配用了固定位数的年、月、日、时、分、秒前缀,比通用\d+匹配精度更高,不会误判内容里的数字串为时间戳

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 03:39:00