我有一个字符串,它有四个部分:
字符串-数字到99-数字到99-数字到99
该部分(最多99个数字)仅出现1到3次
字符串在最后一次重复-number之后仍然可以有-other填充,直到99,或者它可以只是那部分
现在输入可以是
1.粤ICP备15051101号-1
- SS-99-98-97-其他我不需要的东西
1.货架-11 - ut-2-1
1.阿季什赫山 - X-10-1
现在1是错误的,因为其中一个数字超过99,5是错误的,因为它根本不匹配
输入2应该返回3个数字(99,98,97)
我尝试了正则表达式\w+(-\d{1,2})*,但它得到了wan-10作为匹配,谁不应该是这种情况,有什么帮助吗?
2条答案
按热度按时间s3fp2yjn1#
在您的模式中,您正在重复捕获组,它将捕获最后一次迭代的值。
如果你想要3个数字(可能没有前导
-
),你可以在那个捕获组中使用一个重复的非捕获组。说明
^
字符串开头\w+-
匹配1+字字符,后跟-
(
捕获组1\d{1,2}
匹配1-2位数字(?:-\d{1,2}){0,2}
重复0-2次匹配-
和1-2位数字)
关闭组1\b
防止部分字匹配的字边界参见regex demo。
如果你想捕获-99-89-97,那么模式可以缩短为:
再看regex demo。
qncylg1j2#
我会说:
^\w+(?:-\d{1,2}){1,3}\b