regex 正则表达式匹配字符串和重复的模式,最多n次

9bfwbjaz  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(128)

我有一个字符串,它有四个部分:
字符串-数字到99-数字到99-数字到99
该部分(最多99个数字)仅出现1到3次
字符串在最后一次重复-number之后仍然可以有-other填充,直到99,或者它可以只是那部分
现在输入可以是
1.粤ICP备15051101号-1

  1. SS-99-98-97-其他我不需要的东西
    1.货架-11
  2. ut-2-1
    1.阿季什赫山
  3. X-10-1
    现在1是错误的,因为其中一个数字超过99,5是错误的,因为它根本不匹配
    输入2应该返回3个数字(99,98,97)
    我尝试了正则表达式\w+(-\d{1,2})*,但它得到了wan-10作为匹配,谁不应该是这种情况,有什么帮助吗?
s3fp2yjn

s3fp2yjn1#

在您的模式中,您正在重复捕获组,它将捕获最后一次迭代的值。
如果你想要3个数字(可能没有前导-),你可以在那个捕获组中使用一个重复的非捕获组。

^\w+-(\d{1,2}(?:-\d{1,2}){0,2})\b

说明

  • ^字符串开头
  • \w+-匹配1+字字符,后跟-
  • (捕获组1
  • \d{1,2}匹配1-2位数字
  • (?:-\d{1,2}){0,2}重复0-2次匹配-和1-2位数字
  • )关闭组1
  • \b防止部分字匹配的字边界

参见regex demo
如果你想捕获-99-89-97,那么模式可以缩短为:

^\w+((?:-\d{1,2}){1,3})\b

再看regex demo

qncylg1j

qncylg1j2#

我会说:
^\w+(?:-\d{1,2}){1,3}\b

相关问题