2010-03-04 82 views
5

我需要一个匹配数字的正则表达式的帮助。我需要点(。)后最多3位数字:帮助正则表达式 - 需要多达3个数字点(。)

 
12345 ok 
12  ok 
12.1  ok 
12.12 ok 
12.123 ok 
12.1234 Error 
1.123456 Error 

怎么办?提前致谢。

+3

'12.':ok或错误? '.123'好还是错? '。::好还是错? – 2010-03-04 08:53:21

回答

3

你可以试试:

^\d+|(\d+\.\d{1,3})$ 
  • \d - 单位数
  • \d+ - 一个或多个数字,这是一个 数。
  • \. - dot是一个metachar..so以匹配 文字点,您需要转义 它。
  • {1,3} - 之间的1到3(包括 )重复的 以前的事情。
  • ^ and $ - 锚使我们匹配 整个事情不只是 东西的一部分。
13
\d+(?:\.\d{1,3})? 

说明:

 
\d+  # multiple digits 
(?:  # start non-capturing group 
    \.  # a dot 
    \d{1,3} # 1-3 digits 
)?   # end non-capturing group, made optional 
+0

+1对于很好的解释 – IAbstract 2010-03-04 08:57:41

1

你确定你需要的正则表达式来解决你的问题吗? 如何:

bool ContainsAtMostThreeNumbersAfterDot(string str) 
{ 
    int dotIndex = str.IndexOf("."); 
    float f; 
    return float.TryParse(str, out f) && str.Length - dotIndex < 3; 
} 

此代码也完全或100%正确的(看法是一样的想法和处理的具体情况自己),但恕我直言,它表达的意图了很多显然比使用正则表达式解决一个根本不需要regex的问题。

+3

'/ \ d +(?:\。\ d {1,3})?/'对我来说很清楚... – 2010-03-04 09:01:21

+0

...清楚地读给任何知道正则表达式的人。对于不熟悉正则表达式的任何人都不会表达意图,并且对于具有更容易且易读的解决方案的问题的正则表达式的强度过大。 – Marek 2010-03-04 09:43:15

+0

这是如何矫枉过正?对于那些知道正则表达式的人来说,这个应用程序完全可以在语言的甜蜜点上完美实现。你不可能认真对待你的解决方案更容易和更可读。我甚至都不知道'TryParse'的功能如何,而不需要查看API。 – polygenelubricants 2010-03-04 11:15:03