2010-03-04 83 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