Python从字符串列表提取过滤文件名与错误标识的方法咨询
提取错误日志中的文件名与错误标识
原始错误日志数组:
a = [' 276ARDUINO_i2c.c:70:27: error: ‘ARDUINO_I2C_nI2C', ' 248rpy_i2c.h:76:40: error: ‘RPY_I2C_BASE_ADDR_LIST', ' 452rpy_i2c.c:79:77: error: ‘RPY_I2C_IRQ_LIST']
此前已通过以下代码提取错误标识:
newlist = [x.split('‘')[1] for x in a] print(newlist)
输出:
['ARDUINO_I2C_nI2C', 'RPY_I2C_BASE_ADDR_LIST', 'RPY_I2C_IRQ_LIST']
现在需要同时提取去掉开头数字的文件名和错误标识,目标结果格式:
[['ARDUINO_i2c.c', 'ARDUINO_I2C_nI2C'], ['rpy_i2c.h', 'RPY_I2C_BASE_ADDR_LIST'], ['rpy_i2c.c','RPY_I2C_IRQ_LIST']]
实现方案
方法1:纯字符串分割处理
逐行处理日志,通过基础字符串操作剥离无效内容:
result = [] for line in a: # 移除开头空格 stripped = line.strip() # 截取到第一个冒号,得到带数字的文件名部分 raw_filename = stripped.split(':')[0] # 去掉文件名开头的所有数字 clean_filename = raw_filename.lstrip('0123456789') # 提取错误标识 error_id = stripped.split('‘')[1] result.append([clean_filename, error_id]) print(result)
方法2:正则表达式(更简洁可靠)
用正则一次性匹配出目标内容,适配不同长度的前缀数字:
import re # 正则规则:跳过开头空格+数字,捕获文件名;跳过中间内容,捕获错误标识 pattern = r'^\s*\d+([^:]+).*‘(.+)$' result = [] for line in a: match = re.fullmatch(pattern, line) if match: result.append([match.group(1), match.group(2)]) print(result)
两种方法都能输出符合要求的结果,正则方式更适合日志格式可能变动的场景。
内容的提问来源于stack exchange,提问作者pekoms
相关产品推荐
相关产品推荐

