2014-02-05 55 views
0

我有一個文本框,它應該接受以下格式的輸入:正則表達式序列的十進制數

[decimal],[decimal]; [decimal],[decimal]; [十進制],[十進制]

例如:

0.01,0.10; 0.20,0.50; 1.00,3.00; 4.00,1000.00

我的正則表達知識很差。我能夠做到這一點

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

但不能做更多。所以任何幫助將不勝感激。謝謝。

+0

你需要準確匹配什麼? –

回答

1

您的正則表達式可以像(你可能需要調整的空間,因爲它不是完全清楚你的榜樣,他們是正確的)

此外,表達將取決於在最後的分號是否是:

可選:

^(\s?[0-9]+\.[0-9]+,[0-9]+\.[0-9]+;){3}(\s?[0-9]+\.[0-9]+,[0-9]+\.[0-9]+;?)$ 

不應該存在:

^(\s?[0-9]+\.[0-9]+,[0-9]+\.[0-9]+;){3}(\s?[0-9]+\.[0-9]+,[0-9]+\.[0-9]+)$ 

要求:

^(\s?[0-9]+\.[0-9]+,[0-9]+\.[0-9]+;){4} 
+0

我需要用戶始終輸入四對小數點。 – Mdb

+0

好的,我會更新答案。你可能需要調整空格的位置('\ s')。 – Szymon

+0

請注意,因爲你有';?'它將匹配'0.0,0.00.0,0.00.0,0.00.0,0.0' –

0

嘗試使用此:

(\d+\.\d+,\d+\.\d+;?)\s* 
+0

這不符合'.'字符。 – Szymon

+0

是的,謝謝。我更新了 –

+0

這與我發佈的輸入內容不符。 – Mdb

1

此模式將匹配十進制:

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

但是,它不會只匹配一個十進制和之前或之後將不會允許任何其他字符它。另外,小數點組是可選的,所以它允許整個字符串爲空。

要修改這個字符串來匹配您的輸入嘗試這個辦法:

^(([0-9]+(?:\.[0-9]+)?),\s*([0-9]+(?:\.[0-9]+)?)(;\s*|$)){4}$ 
+0

你好,這幾乎是正確的。但它允許用戶只輸入一半的序列。例如,輸入:0.01,0.10;也是可以接受的。我需要用戶總是必須輸入四對小數點。 – Mdb

+0

@Mdb對不起,你的問題有點令人困惑,因爲在第一個例子中你有3對,而在第二個例子中你有4個。你可以通過在最後用'{* N}'。看到我更新的答案。 –

0

下面的正則表達式定義將匹配所有十進制數;並且,分隔符,也處理結束小數沒有分隔符在C#

((?<DecimalNumber>[-+]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?)([;,]*)) 

使用for循環同一組

0

捕捉多個值,如果你希望它是非常嚴格和準確的例子匹配:

^(\d+\.\d+\,\d+\.\d+;\s){3}(\d+\.\d+\,\d+\.\d+\s*) 

如果它可以更寬鬆,並允許的空格:

^(\s*\d+\.\d+\s*\,\s*\d+\.\d+\s*;\s*){3}(\s*\d+\s*\.\d+\s*\,\s*\d+\.\d+\s*) 

最後一個也匹配

0.01, 0.10; 0.20, 0.50; 1.00 ,3.00; 4.00 ,1000.00