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

如何编写正则表达式提取含内部连字符字符串的末尾数字?

解决正则提取末尾数字的问题

你的问题核心是原正则把所有连字符都当成了分隔符,但字符串里存在带连字符的子内容(比如2-Hr),导致[^-\n]+会在遇到这类内部连字符时就停止匹配,没法正确跳过前面的内容定位到末尾的数字。

正确的正则方案

不需要按连字符的数量计数,直接定位到最后一组“空格-空格”分隔符后的内容即可,你的目标数字都是在这种格式的分隔符之后:

  • 最简方案(直接匹配末尾的数字):

    - (\d+)$
    

    解释:精准匹配字符串末尾的-(空格+连字符+空格),捕获后面的数字。

  • 更严谨的方案(兼容更复杂的前置内容):

    .* - (\d+)$
    

    解释:.*匹配任意内容直到最后一个-,再捕获后面的数字,避免前面出现零散连字符干扰。

测试验证

用你的两个字符串测试,都能正确提取目标数字:

  1. Special - VIP - 40 → 捕获结果:40
  2. 2-Hr and 1-Hr - 2-Hour Workshop - 35 → 捕获结果:35

原正则失效原因

原正则(?:[^-\n]+-){2}(.*)$中,[^-\n]+是“匹配非连字符的内容”,遇到2-Hr里的-就会停止匹配,所以第二个字符串里的前两个-会被误判成分隔符,最终匹配到的是Hr and 1-Hr - 2-Hour Workshop - 35,而非目标数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:45:07