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

Git提交消息多章节ID提取Python实现技术求助

优化Git提交消息ID提取的Python代码方案

问题分析

你原来的代码只能提取Features:章节下的单个ID,没法处理多个自定义命名的章节,也没法抓取同一章节里的多个ID。咱们用正则表达式来重构逻辑,就能灵活适配各种场景啦。

优化后的代码

import re

def extract_all_ids(commit_message):
    # 正则模式:匹配任意章节标题,再抓取该章节下所有ID
    # 模式解释:
    # - ([\w\s]+): 匹配章节名称(支持带空格的自定义名称,直到冒号为止)
    # - \s*: 匹配标题后的任意空白字符
    # - 后续子模式匹配一个或多个ID项,捕获数字ID
    section_pattern = re.compile(r'([\w\s]+):\s*(?:.*?- ID: (\d+)\s*)+', re.DOTALL)
    
    result_dict = {}
    # 遍历所有匹配到的章节
    for section_match in section_pattern.finditer(commit_message):
        section_name = section_match.group(1).strip()
        # 从当前章节内容里提取所有ID
        ids_list = re.findall(r'- ID: (\d+)', section_match.group(0))
        result_dict[section_name] = ids_list
    
    # 没有匹配到任何ID时返回默认标记,否则返回结构化字典
    return result_dict if result_dict else "-"

代码测试

用你提供的示例提交消息测试:

sample_msg = """Some text here Features: - ID: 4554773 - ID: 23423234 Some_random_text: - another stuff here - ID: 2255444 ========= Another info here"""
print(extract_all_ids(sample_msg))

运行结果:

{'Features': ['4554773', '23423234'], 'Some_random_text': ['2255444']}

代码优势

  • 支持任意自定义章节名称,不管章节顺序如何都能精准匹配
  • 提取同一章节下的所有ID,不再局限于单个结果
  • 返回结构化字典,方便后续针对不同章节做处理
  • 自动忽略无ID的章节,无匹配结果时返回预设默认值

灵活调整说明

如果ID格式有变化(比如包含字母),只需要把正则里的(\d+)改成([\w]+);如果章节名称有特殊字符,调整([\w\s]+)部分即可,适配性很强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:36:04