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

正则表达式匹配问题:按path:line:col分割错误日志并完整匹配内容

修正正则表达式以完整匹配path:line:col开头的错误条目

问题分析

原正则的核心问题在于匹配范围控制不精准:

  • 前瞻规则(?=^.*:[0-9]*:[0-9]*|\Z)无法准确界定下一个条目的起始位置
  • .+?[ ]+强制限制换行且匹配内容有限,导致无法包含完整的代码提示行
  • 行号/列号用[0-9]*允许空值,不符合日志的实际格式规范

修正后的正则代码

re_comp = re.compile(
    r"^(?P<path>.*?):(?P<line>\d+):(?P<column>\d+): "
    r"(?P<type>error|warning): "
    r".*?(?=^.*?:\d+:\d+: |\Z)",
    re.MULTILINE | re.DOTALL
)

关键修正点

  • 移除path捕获组的可选符号?,确保仅匹配以path:line:col:开头的有效条目
  • 将[0-9]*替换为\d+,保证行号和列号为至少一位的有效数字
  • 用.*?替代.+?[ ]+,配合精准前瞻(?=^.*?:\d+:\d+: |\Z),实现从当前条目开头到下一个条目起始前所有内容(包括多行代码提示)的非贪婪匹配
  • 前瞻规则明确匹配下一个条目的起始模式^.*?:\d+:\d+: ,彻底避免跨条目匹配

效果示例

对于如下错误日志:

file1.py:10:5: error: Undefined variable 'x'
    print(x)
file2.py:20:3: warning: Unused variable 'y'
    y = 5

修正后的正则会生成两个独立匹配:

  1. 第一个结果:file1.py:10:5: error: Undefined variable 'x'\n print(x)(包含错误行和对应代码提示)
  2. 第二个结果:file2.py:20:3: warning: Unused variable 'y'\n y = 5(完整的第二个错误条目)

内容的提问来源于stack exchange,提问作者Mike van Dyke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:26:07