2011-02-10 30 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)); 
相关问题