当我只想要唯一的数字时,Regex会保持匹配重复的数字

时间:2015-06-25 20:17:34

标签: regex

我想在字符串中匹配一个确切的数字,但如果它一起重复,我的正则表达式会保持与确切数字的匹配。

我有以下字符串:

SomePrefix1201-21,4,52

我有以下正则表达式找到21的匹配:

SomePrefix[\d]+-[,\d]*21[,$]*

它会匹配此字符串。

然而,它也匹配:

SomePrefix1201-2121,4,52

但我只希望它匹配,如果它是确切的数字。

这个数字也可能存在于最后,因此并不总是用逗号表示。

我像任何事情一样绞尽脑汁

更新

根据下面的更正答案,我设法找到了我需要的正确的正则表达式,还添加了一个前瞻性。

SomePrefix[\d]+-([\d]*,)*21(?!\d)[,$]*

2 个答案:

答案 0 :(得分:1)

[,\d]*部分按任意顺序匹配任意数量的数字和逗号 。您可能想要的是([\d]*,)*,以便任何前面的数字和逗号必须以逗号结尾(不是数字,这将成为数字的一部分)。

答案 1 :(得分:0)

SomePrefix[^-]+-(\d+,)*(21,|21$)

匹配前缀,后跟一个或多个非短划线字符,然后是短划线,然后零或多个逗号终止的数字字段,然后是21,(可能还有更多)材料)或只是21锚定到最后。

如果以逗号结尾的字段可以为空,那么当然是\d*而不是\d+

目前尚不清楚您是否可以在字符类中广泛使用锚操作符$(也许某些正则表达式实现具有此功能),因此我将其分发为两个匹配21,看起来明确。 21可以从中解决:

(21,|21$)  ->  21(,|$)