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

正则表达式匹配特定格式字符串及重复模式问题求助

解决方案

验证字符串合法性的正则表达式

如果你需要判断整个字符串是否符合规则(开头字符串+1-3个1-99的数字片段,后续可带任意内容),可以使用:

^\w+(-[1-9]\d{0,1}){1,3}(?:-.*)?$

正则各部分说明

  • ^:锚定字符串开头,确保匹配从开头开始
  • \w+:匹配开头的任意单词字符序列(对应示例中的wan、ss等开头字符串)
  • (-[1-9]\d{0,1}){1,3}:匹配1到3个合法数字片段:
    • -:数字片段的分隔符
    • [1-9]\d{0,1}:匹配1-99的数字——第一位必须是1-9(避免0或0开头的数字),第二位可选0-9
  • (?:-.*)?:可选的后续内容,?:表示非捕获组,.*匹配任意字符,?表示这部分可有可无
  • $:锚定字符串结尾,确保整个字符串符合规则

提取数字的正则表达式

如果你只需要从合法字符串中提取那1-3个数字,可以使用全局匹配:

-([1-9]\d{0,1})

捕获组会直接提取数字部分,无需额外处理开头的-。

原正则的问题分析

你之前使用的\w+(-\d{1,2})*存在三个核心问题:

  1. *允许0个数字片段,会错误匹配完全没有数字的字符串(比如示例5)
  2. \d{1,2}允许0(如-0)和三位数的前两位(如wan-1051会被匹配成wan-10),不符合1-99的数字要求
  3. 没有锚定字符串首尾,会匹配包含无效数字的字符串的前半部分

示例验证

针对你的示例:

  • wan-1051-1-3:因包含三位数1051,不匹配合法性正则
  • ss-99-98-97-some other stuff i don't need:匹配合法性正则,提取出99、98、97
  • shelf-11:匹配合法性正则
  • ut-2-1:匹配合法性正则
  • ajshkh-sjahkdjh-sjhka:无合法数字片段,不匹配合法性正则
  • x-10-1:匹配合法性正则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:25:24