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
相关产品推荐
相关产品推荐

