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

正则表达式如何分组捕获最后一串数字及其之前的全部内容?

问题原因

你当前用的.*是正则默认的贪婪匹配模式,会尽可能匹配最长的字符串,只会给后面的\d+留最少满足匹配要求的1个数字,因此才会出现Frame分组只抓到最后1位3的问题。

解决方法

调整正则,确保Frame分组捕获的是最后一段连续数字即可,推荐两种可靠写法:

写法1(兼容性更高,兼容字符串开头就是数字的场景)

(?P<Sequence>.*\D)?(?P<Frame>\d+)(?!.*\d)

原理是通过\D限制Sequence分组的结尾必须是非数字,避免它吞掉Frame分组的前缀数字,末尾加?是为了兼容字符串开头就是数字的极端场景(比如0023.jpg这种没有前置非数字内容的情况,此时Sequence分组值为空,Frame分组值为0023)。

写法2(逻辑更直观)

(?P<Sequence>.*?)(?P<Frame>\d+)(?=\D*$)

原理是将.*改为非贪婪模式.*?,同时通过正向先行断言(?=\D*$)明确要求Frame分组匹配的数字之后,全是非数字字符直到字符串结尾,确保Frame抓的是最后一段连续数字。

匹配验证

针对你的示例字符串see.Ya23.v2.0023.jpg,两种写法的捕获结果都符合预期:

  • Sequence分组:see.Ya23.v2.
  • Frame分组:0023

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:18:03