2011-02-10 28 views
2

我想帶上的string只具有數值和一個小數點.... 什麼是錯我的正則表達式?簡單的數字正則表達式不工作

string test = "1e2e3.e4"; 
var s = Regex.Replace(test, "^\\d*\\.\\d*$", ""); 
+1

您正在使用正則表達式進行匹配,但它們正在替換?正則表達式很好匹配你正在尋找的東西。但是如果您想要替換無效字符,則需要定義您想要的內容。鑑於`1.2.3.4`,結果應該是什麼? `123.4`? `1.234`? `12.34`?等... – ircmaxell 2011-02-10 04:06:13

+0

我只想讓數字和小數點。我將以不同的方式處理多個小數點,具體取決於我的控件的一些屬性......這可能嗎? – Gabe 2011-02-10 04:10:36

回答

1

你在做什麼的條帶化掉一個十進制數,試試這個來代替:

Regex.Replace(test, "[^\\d.]", ""); 

如果你想保持只有一個點,你首先需要確定要保留哪個點如果有很多的話。

更新:假設你想保持第一或最後一個點,用String.IndexOfString.LastIndexOf分割字符串及用途:

Regex.Replace(test, "\\D", ""); 

每個生成的字符串的。這可能會比不使用正則表達式慢得多,因爲在馬特漢密爾頓答案很難。

0
string test = "1e2e3.e4"; 
var s = Regex.Replace(test, @"[^\d\.]", ""); 
+2

如果我沒有弄錯,那會留下'^'字符。 – 2011-02-10 04:15:21

1

正則表達式可能會爲您的需要矯枉過正。

string test = "1e2e3.e4.56543fds.4"; 

var foundPeriod = false; 

var chars = test.Where(c => Char.IsDigit(c) 
    || (c == '.' && !foundPeriod && (foundPeriod = true))).ToArray(); 

Console.WriteLine(new String(chars)); 
相關問題