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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:30:59