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

Python正则re.escape使用报错TypeError: 第一个参数必须为字符串或已编译模式

报错原因

你定义pattern变量时,在字符串末尾多写了一个英文逗号,,Python会自动将该变量识别为存储了字符串的元组,而非re.findall要求的字符串/已编译正则对象,因此触发类型错误。

修复方案

除了修正语法错误外,还需要调整正则标识和匹配规则,才能实现多行文本匹配需求:

  1. 删掉pattern定义末尾的逗号,修正语法问题
  2. 替换re.MULTILINE标识为re.DOTALL:re.MULTILINE的作用是控制^、$匹配单行的首尾,而你需要让.支持匹配换行符,必须开启re.DOTALL标识
  3. 把贪婪匹配.*改为非贪婪匹配.*?,避免日志中存在多个Traceback块时,匹配范围横跨多个独立错误栈的问题

完整可运行的实现代码如下:

import re

# 可自行替换首尾匹配的固定字符串
start_text = "Traceback (most recent call last):"
end_text = "botocore.exceptions.ClientError: An error occurred (ExpiredToken) when calling the PutObject operation: The provided token has expired."

# 转义特殊字符后拼接正则,非贪婪匹配中间内容
pattern = rf"{re.escape(start_text)}(.*?){re.escape(end_text)}"
# 开启DOTALL支持跨行匹配,your_log_text替换为你的日志文本变量
match_results = re.findall(pattern, your_log_text, flags=re.DOTALL)

如果需要匹配结果同时包含首尾的固定字符串,只需调整正则的捕获组范围即可:

pattern = rf"({re.escape(start_text)}.*?{re.escape(end_text)})"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:27:04