只有正则表达式中的数字,负数

时间:2011-10-17 10:21:07

标签: regex c#-4.0

我不得不将一个字符串分成他的数字。

例如,字符串看起来像:

VAR_1123 Var_G -12.34 VAR-14.34 12.4 12 -234

我想要的结果:

-12.34,
12.4
12
-234

我试试这个正则表达式:

([\-]?[0-9]+[\.[0-9]+]?)

但结果还包括1123和-14.34。

如何排除所有具有下划线或字符bevor的数字?

对于测试我使用此链接:

http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

5 个答案:

答案 0 :(得分:2)

你在这里: - )

(?<=\A|\s)-?[\d.]+\b

答案 1 :(得分:1)

\s\-*\d\S*\d

前缀空格,可能为负数,以边界之间可能的字符为界。工作,但显然可以改进以涵盖更多案件。

答案 2 :(得分:0)

  • 使用括号而不是字符类对点和最后的数字进行分组。
  • 使用?:表示非捕获匹配。
  • [\-]改为-
  • 使用前瞻或后视来检查周围的空白。

所以最后的正则表达式如下所示:

(?<=\s|^)-?[0-9]+(?:\.[0-9]+)?(?=\s|$)

查看在线工作:ideone

答案 3 :(得分:0)

您需要的唯一额外标准是数字应该在它们之前有空格,所以这应该有效 -

\s[\-]?[0-9]+[\.[0-9]+]?

我刚在正则表达式之前添加了\s。它可以按照你想要的例子工作。

答案 4 :(得分:0)

使用此模式

([$\s][\-]?[0-9]+[\.[0-9]+]?)

编辑 - 更改parantheses以便不会捕获\。

[$\s]([\-]?[0-9]+[\.[0-9]+]?)