RegEx仅匹配整个单词中的数字

时间:2012-04-05 17:13:13

标签: .net regex

我想使用.NET匹配字符串中的正数和负数(没有小数或千位分隔符),但我想只匹配整个单词。 所以如果字符串看起来像

redeem: -1234
paid: 234432

然后我想匹配-1234和234432

但如果文字是

LS022-1234-5678
FA123245

然后我想要没有回复的比赛。我试过了

\b\-?\d+\b

但它只会在第一个场景中匹配1234,而不会返回“ - ”符号。

感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

空格与-之间没有字边界,因此您无法使用\b

您可以使用:

(?<!\S)-?\d+\b

(?<![\w-])-?\d+\b

取决于您的要求(未完全指定)。 两者都适用于你的例子。

答案 1 :(得分:0)

嗯,我确信这远非完美,但它适用于您的示例:

(?<=\W)-?(?<!\w-)\d+

如果你想在数字之前允许下划线,那么我将使用这个修改:

(?i)(?<=[^a-z0-9])-?(?<![a-z0-9]-)\d+

让我知道任何问题,我会尽力帮助。如果您希望我解释其中任何一个,请告诉我。

修改

要仅匹配数字/负号前面的空格或制表符(如下面的评论中所述),则可以使用此选项:

(?<=[ \t])-?\d+

请注意,它会匹配,例如在电话号码,时间或日期值的第一个数字系列上,如果数字位于行的开头(换行后),则不匹配 - 确保这是您的意图:D