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

如何用Python正则表达式提取日志中的进程ID与ERROR字符串?

解决日志行中同时提取进程ID和ERROR字符串的问题

你的问题核心在于正则表达式的捕获组设置——你只给进程ID部分加了捕获括号,而「ERROR」对应的文本只是被正则匹配到,但没有被单独捕获,所以没法直接通过result的索引获取它。

下面是具体的修改方案:

1. 调整正则表达式,新增第二个捕获组

把原来的正则r"\[(\d+)\]: [A-Z]+"修改为:

regex = r"\[(\d+)\]: ([A-Z]+)"

这里给[A-Z]+也加上了括号,这样就形成了两个捕获组:

  • 索引1:匹配到的进程ID(比如12345)
  • 索引2:匹配到的大写错误字符串(比如ERROR)

2. 修改函数返回逻辑,返回两个捕获值

调整函数,让它返回包含进程ID和错误字符串的元组(这样后续可以灵活处理两个值):

import re

def extract_pid_and_error(log_line):
    regex = r"\[(\d+)\]: ([A-Z]+)"
    result = re.search(regex, log_line)
    if result is None:
        # 未匹配到返回空值,也可以根据需求自定义默认值
        return ("", "")
    # 返回两个捕获组的内容
    return (result[1], result[2])

3. 调用函数并打印结果

调用时可以分别接收两个值,再单独打印:

log = "July bad_process[12345]: ERROR"
pid, error_str = extract_pid_and_error(log)
print(f"进程ID: {pid}")
print(f"错误类型: {error_str}")

运行这段代码后,就能同时输出:

进程ID: 12345
错误类型: ERROR

如果你的需求是返回一个拼接后的字符串(比如用空格分隔),也可以把函数的返回语句改成:

return f"{result[1]} {result[2]}"

这样调用print(extract_pid_and_error(log))就会直接输出12345 ERROR。

内容的提问来源于stack exchange,提问作者larry8989

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:47:34