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

如何用Python的re模块分割Git日志为独立提交条目?

用Python的re模块分割Git日志字符串

需求是将给定的Git日志字符串分割为单个提交条目组成的数组,每个条目包含完整的提交信息(commit哈希、作者、日期、提交消息)。

解决方案

使用re.findall结合正则表达式直接提取每个提交块,核心正则模式利用提交的起始特征和非贪婪匹配实现精准分割:

import re

git_log = """commit 8e018dbcdbff15c3fc9ef4460b4214f47f71ddf6
Author: ISAAC.NEWTON <ISAAC.NEWTON@GOOGLE.COM>
Date:   Fri Apr 28 18:58:00 2023 +0800

    new cat

commit 9274b33435238122c8d6d389e73266f6a3e68745
Author: ISAAC.NEWTON <ISAAC.NEWTON@GOOGLE.COM>
Date:   Wed Apr 19 11:04:04 2023 +0800

    meow

commit 4f113912741f753c75a44f18790ff5903e910fad
Author: ISAAC.NEWTON <ISAAC.NEWTON@GOOGLE.COM>
Date:   Fri Apr 14 17:55:55 2023 +0800

    Add test files

commit 9274b33435238122c8d6d389e73266f6a3e68745
Author: ISAAC.NEWTON <ISAAC.NEWTON@GOOGLE.COM>
Date:   Wed Apr 19 11:04:04 2023 +0800

    Second commit test

commit 9274b33435238122c8d6d389e73266f6a3e68745
Author: ISAAC.NEWTON <ISAAC.NEWTON@GOOGLE.COM>
Date:   Wed Apr 19 11:04:04 2023 +0800

    First commit
"""

# 提取所有提交块
commits = re.findall(r'(?s)^commit .*?(?=^commit |\Z)', git_log, re.MULTILINE)

# 如需和示例格式完全一致(每个元素开头带换行),执行以下转换
commits = ['\n' + commit for commit in commits]

# 输出结果
print(commits)

正则模式说明

  • (?s):开启DOTALL模式,让.可以匹配换行符,确保覆盖提交的多行内容
  • ^commit :匹配行首的commit ,作为每个提交块的起始标记
  • .*?:非贪婪匹配任意字符,避免跨提交块匹配
  • (?=^commit |\Z):正向预查,匹配到下一个行首的commit 或者字符串结尾时停止,确保分割边界准确

该模式具备通用性,即使提交消息是多行内容,也能正确提取完整的提交块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:55:23