如何用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
相关产品推荐
相关产品推荐

