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

Python中re.findall匹配转义序列结果不符预期的原因探究

问题原因及解决方法

核心问题有两个:

  • re.findall的行为特性:当正则表达式中存在捕获组时,findall会优先返回捕获组的匹配结果,而非整个正则表达式匹配的完整字符串。
  • 重复捕获组的覆盖问题:你写的(\\\d+)+是一个被重复匹配的捕获组,每次匹配到新的\数字序列时,都会覆盖之前捕获组存储的内容,最终只保留最后一次匹配的结果(也就是\125)。

解决办法

方法1:使用非捕获组

把重复的匹配部分改成非捕获组(用(?:...)包裹),这样正则里没有捕获组,findall就会返回整个匹配的字符串:

import re
matches = re.findall(r'\"(?:\\\d+)+\"', r'\"\123\124\125\"')
print(matches)
# 输出: ['"\\123\\124\\125"']

方法2:捕获整个目标字符串

给整个要匹配的内容加一个外层捕获组,之后提取捕获组的第一个元素:

import re
matches = re.findall(r'(\"(\\\d+)+\")', r'\"\123\124\125\"')
print([item[0] for item in matches])
# 输出: ['"\\123\\124\\125"']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:07:48