2010-06-20 71 views
0

這是我對數字dnumbers正則表達式:正則表達式的數量問題

\d+(.\d+)+(,\d+) 

,但現在我有問題,這個數字3或30不再有效。我的正則表達式也是3號和40號。

THX

+0

什麼是數字量(或數字 「dnumber」)做的更好?你的意思是小數嗎?你目前的Regexp是如何來的? (它看起來相當遙遠你需要什麼)。你想接受什麼格式,你有樣品嗎? – Tao 2010-06-20 17:00:19

回答

3
\d+(\.\d+)*(,\d+)? 

在正則表達式的+是指「至少一個」,而*裝置「零個或多個」和?手段「任一個者或無」。

此外,您必須以\.作爲轉義時間段,否則.字符是正則表達式中意義爲「任何單個字符」的特殊字符。

如果你想確保在數.的(如果有的話)總是單獨的數字由3組,你可以使用這個(在{x}語法意味着‘精確X次’):

\d+(\.\d{3})*(,\d+)? 

或迫使千位分隔符的時候,你可以使用這個(在{x,y}語法的意思是「從X隨時隨地到y重複):

\d{1,3}(\.\d{3})*(,\d+)? 
+0

你最後一個匹配'12000.423';它不強制第一個塊有數千個分隔符。 – mpen 2010-06-20 17:18:58

+0

@Mark:是的,這是故意的(爲了匹配像'12000,34'這樣的數字)。但是,如果強制要求數千個分隔符,那麼簡單地改變前導'\ d +'爲'\ d {1,3}'就可以。 – Amber 2010-06-20 17:20:43

+0

好:)只要簽入。無論如何,我給你+1了。 – mpen 2010-06-20 17:38:18

1
\d+((\.\d+)|(,\d+))? 
1

如果你真正想要的是.千位分隔符,和,爲小數點分隔符,試試這個:

\d{1,3}(\.\d{3})*(,\d+)? 
+1

我認爲OP更多的是試圖解析歐洲標準格式的數字,其中','是小數點分隔符,'。'是數字分組標記。 – Amber 2010-06-20 17:06:05

+0

@Amber:哦......那還不清楚。編輯。 – mpen 2010-06-20 17:15:36

1

所以你要匹配1和3.000和3.000,5一個正則表達式?

如果你不想要捕獲的結果本應該做的:

[.\d]+(,\d+)? 

但請記住,這是不是很accurat無論如何,因爲它也符合2.0.0,12,你還應該包括一個加減檢查:

^(\+|-)?[.\d]+(,\d+)? 

在C#中,你可以與

double result; 
bool isDouble = Double.TryParse("3.000,5", Globalisation.CultureInfo.InvariantCulture);