2013-03-18 65 views
1

可以在任何你帮我一个正则表达式允许这样的:正则表达式的数字和小数点

123.123 
123. 
1323.2 
1.2312 
1,23 
123123,32 
123, 
123412 

这样总结:只有一个小数点,也可以是最后一次..但最不首先。

但不是这样的:

12.323.323 
1213.. 
12331...3123 
.12313 
,123132 
+0

更'正则表达式'更''解析'我建议。 – Jodrell 2013-03-18 11:30:29

+2

尝试'decimal.Parse'或'double.Parse' – Romoku 2013-03-18 11:33:31

+0

可能重复的[C#RegEx for decimal number](http://stackoverflow.com/questions/6087620/c-sharp-regex-for-decimal-number) – stema 2013-03-18 11:38:27

回答

11

这应该中旬工作

^\d+[\.,]?\d*$

^字符串的开始
\d+ 1或多个数字
[\.,]? 0或1十进制或逗号
\d* 0或多个数字串的
$端。

+0

中间的部分是可选的。如果没有逗号或句点,则可以将其解释为一个或多个数字,后跟零个或多个数字,从而导致某些引擎出现歧义并可能导致性能下降。此外,样品中,他所提供的小数点分隔符不是可有可无的 – 2013-03-18 11:40:29

+0

谢谢,我已经相应修改它 – Tom 2013-03-18 11:42:27

+0

woops ..犯了一个错误..小数点或逗号必须是可选.. – Mathias 2013-03-18 12:07:52

2
\b\d+(\.|,)\d*\b 

这意味着:

a word boundary 
a digit one or more times 
a `.` or a `,` 
a digit zero or more times 
a word boundary 

词的边界,以防止有正则表达式匹配来自多个

+0

这是一个简单的,但它也会匹配一个,或。通过它自己。要处理这种情况,您需要将其更改为处理单独的案例(数字,前面,后面或两者)。我将留给你,因为修改这个正则表达式可以帮助你理解它 – 2013-03-18 11:37:19

0

试试这个,它适用于你提到的所有情况。

(\ d +)(((\ |)\ d +)|,。))

+2

您需要转义' .'与'\ .',或者它会匹配123a123之类的东西。 – Tom 2013-03-18 11:51:56

+0

我这里测试http://gskinner.com/RegExr/ 和它的作品! – 2013-03-18 13:53:27

+0

哦,你说得对。 – 2013-03-18 13:55:30

0

我的修为您正则表达式:(\ d +)(((|)\ d +)|,) ? 添加了'?'结束,它将适用于零值