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

Python正则表达式捕获组问题:如何捕获目标数字73?

解决正则捕获只得到最后一位数字的问题

嘿,作为有Perl基础的开发者,你肯定懂正则的基本逻辑,但刚转Python没反应过来——你遇到的问题就是贪婪匹配在搞怪!

先看你的原代码:

a='Question 73 of 2943'
import re
re.match("Question.*(\d+)\s+of", a).group(1)  # 输出 '3'

为什么会只拿到3?因为.*是贪婪模式,它会尽可能多地匹配字符:从"Question"之后开始,它会一直匹配到离" of"最近的位置,把"7"也包含进去,只留下最后一个数字3给括号里的\d+。

给你两个靠谱的解决方案:

方案1:用非贪婪匹配(.*?)

把.*改成.*?,让它匹配尽可能少的字符,这样遇到第一个数字序列就会停下来,正好捕获到73:

re.match("Question.*?(\d+)\s+of", a).group(1)  # 输出 '73'

方案2:更精准的匹配(推荐)

既然你要匹配的是"Question"后面跟着空格加数字,完全不用模糊的.*,直接用\s+匹配空格,这样更高效也更清晰:

re.match("Question\s+(\d+)\s+of", a).group(1)  # 输出 '73'

这种写法更符合正则的“精准匹配”原则,避免了贪婪/非贪婪的歧义,以后维护也更省心。

其实Perl里的正则规则和Python是一致的,只是你可能之前没碰到这种场景~ 试试上面的方法,应该就能拿到你想要的73啦!

内容的提问来源于stack exchange,提问作者Joel G Mathew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:02:50