Python2.7无法提取file1.txt中指定Git提交信息行的问题
解决Python 2.7提取指定提交信息行的问题
看起来你的代码没能匹配到目标行,核心问题是正则表达式大小写不匹配,还有一些可以优化的细节,我来一步步帮你修正:
问题分析
你的目标行是:
Commit message: "Added parameter for jmeter for Jenkins"
但代码里用的正则是'^Commit Message'——注意这里的Message是大写M,而目标行里是小写的message,这就导致正则完全匹配不到任何行,最终indexofGitMsgList是空列表,调用max()时还会抛出ValueError。
另外,读取文件时每行可能包含换行符,直接匹配也可能受干扰,最好先做去除首尾空白的处理。
修正方案
方案1:修正正则并优化匹配逻辑
import re # 读取文件内容,按行分割 with open('file1.txt', 'r') as f: message = f.readlines() # 修正正则:匹配小写的message,同时忽略大小写(可选,增强容错) indexofGitMsgList = [ gin for gin, item in enumerate(message) if re.search(r'^Commit message:', item.strip(), re.IGNORECASE) ] if indexofGitMsgList: # 取最后一个匹配的行索引 indexofGitMsg = max(indexofGitMsgList) gitMsg = message[indexofGitMsg].strip() # 去除换行和首尾空格 print(gitMsg) else: print("未找到包含'Commit message:'的行")
方案2:更简洁的遍历写法(推荐)
不需要生成索引列表,直接遍历文件时记录最后一个匹配的行,更高效:
with open('file1.txt', 'r') as f: target_msg = None for line in f: stripped_line = line.strip() # 精确匹配开头,也可以用re.IGNORECASE忽略大小写 if stripped_line.startswith('Commit message:'): target_msg = stripped_line if target_msg: print(target_msg) else: print("目标提交信息行未找到")
额外提示
- 如果目标行可能有大小写变化(比如
COMMIT MESSAGE:或commit message:),可以用re.IGNORECASE参数忽略大小写匹配,增强代码的容错性。 - 用
strip()处理每行的首尾空白(包括换行符、空格),避免因格式问题导致匹配失败。
内容的提问来源于stack exchange,提问作者Vageesh S M
相关产品推荐
相关产品推荐

