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

Python中re.findall方法行为异常:匹配结果不符预期求助

为什么findall返回['ytho']而不是['Python']?

这事儿核心是re.findall()的一个关键行为规则——当正则表达式里包含捕获组(就是用()括起来的部分)时,findall默认只会返回捕获组匹配到的内容,而不是整个正则匹配到的完整字符串。

看你的正则r'P(.*?)n':

  • P和n是正则里的固定匹配边界,中间的(.*?)是一个捕获组,它负责匹配P和n之间的任意字符(非贪婪模式)。
  • 当引擎匹配到Python时,P和n只是用来定位的锚点,捕获组(.*?)实际抓到的是ytho,所以findall就直接返回这个捕获组的结果了。

想要得到完整的Python,有两种简单的调整方式:

  • 用非捕获组:把捕获组改成(?:.*?),这样括号里的内容就不会被单独捕获,findall就会返回整个匹配的字符串。正则写成r'P(?:.*?)n'。
  • 给整个匹配加捕获组:把整个正则用括号包起来,比如r'(P.*?)n',这样外层的捕获组会把Python完整捕获,findall就返回这个完整内容。

看实际代码示例:

import re
text1 = '"Python", "PHP", "Java",'

# 非捕获组写法
print(re.findall(r'P(?:.*?)n', text1))  # 输出: ['Python']

# 外层捕获组写法
print(re.findall(r'(P.*?)n', text1))     # 输出: ['Python']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:27:46