我想在字符串中匹配一个确切的数字,但如果它一起重复,我的正则表达式会保持与确切数字的匹配。
我有以下字符串:
SomePrefix1201-21,4,52
我有以下正则表达式找到21的匹配:
SomePrefix[\d]+-[,\d]*21[,$]*
它会匹配此字符串。
然而,它也匹配:
SomePrefix1201-2121,4,52
但我只希望它匹配,如果它是确切的数字。
这个数字也可能存在于最后,因此并不总是用逗号表示。
我像任何事情一样绞尽脑汁
更新
根据下面的更正答案,我设法找到了我需要的正确的正则表达式,还添加了一个前瞻性。
SomePrefix[\d]+-([\d]*,)*21(?!\d)[,$]*
答案 0 :(得分:1)
[,\d]*
部分按任意顺序匹配任意数量的数字和逗号 。您可能想要的是([\d]*,)*
,以便任何前面的数字和逗号必须以逗号结尾(不是数字,这将成为数字的一部分)。
答案 1 :(得分:0)
SomePrefix[^-]+-(\d+,)*(21,|21$)
匹配前缀,后跟一个或多个非短划线字符,然后是短划线,然后零或多个逗号终止的数字字段,然后是21,
(可能还有更多)材料)或只是21
锚定到最后。
如果以逗号结尾的字段可以为空,那么当然是\d*
而不是\d+
。
目前尚不清楚您是否可以在字符类中广泛使用锚操作符$
(也许某些正则表达式实现具有此功能),因此我将其分发为两个匹配21,看起来明确。 21
可以从中解决:
(21,|21$) -> 21(,|$)