剥去字符串中的非数字字符

Ste*_*ieB 97 asp.net

我想在ASP.NET C中删除字符串中的非数字字符#

所以即40,595 pa

最终会得到40595

谢谢

Fre*_*örk 196

有很多方法,但这应该做(虽然不知道它是如何用非常大的字符串执行的):

private static string GetNumbers(string input)
{
    return new string(input.Where(c => char.IsDigit(c)).ToArray());
}
Run Code Online (Sandbox Code Playgroud)

  • 您应该使用`IsDigit`而不是`IsNumber`:*"此方法[`IsNumber`]确定`Char`是否属于任何数字Unicode类别.除了包括数字,数字还包括字符,分数,下标,上标,罗马数字,货币分子和环绕数字.这种方法与`IsDigit`方法形成对比,后者确定`Char`是否是基数为10的数字."*http://msdn.microsoft.com/en-us /library/yk2b3t2y.aspx (21认同)
  • 可以进一步简化它``返回新字符串(input.Where(char.IsDigit).ToArray());`.我只是让它更具可读性 (6认同)
  • @TrevorBrooks是假设你可以扩展方面:`input.Where(C => char.IsDigit(C)|| char.IsWhiteSpace(C))` (2认同)
  • 很好的答案.可能只是想考虑将函数从"GetNumbers"重命名为"GetDigits"......以明确其意图. (2认同)
  • 也是一个很好的扩展方法。 (2认同)

Jon*_*röm 51

感觉非常适合正则表达.

var s = "40,595 p.a.";
var stripped = Regex.Replace(s, "[^0-9]", "");
Run Code Online (Sandbox Code Playgroud)

"[^0-9]"可以替换,@"\D"但我喜欢的可读性[^0-9].

  • 我对由一起连接在一起的100,000个GUID构成的字符串进行了Regex与LINQ的简单比较(产生了3,600,000个字符串).正则表达式一直持续半秒左右,而LINQ始终处于1/10秒范围内.LINQ基本上平均速度提高了5倍或更多. (5认同)
  • 我会同意,只要您同意 .Net 中与正则表达式相关的开销 (2认同)
  • 出于好奇,此答案与Fredrik Mork的答案之间的性能开销是多少? (2认同)

小智 8

扩展方法将是一种更好的方法:

public static string GetNumbers(this string text)
    {
        text = text ?? string.Empty;
        return new string(text.Where(p => char.IsDigit(p)).ToArray());
    }
Run Code Online (Sandbox Code Playgroud)


小智 6

public static string RemoveNonNumeric(string value) => Regex.Replace(value, "[^0-9]", "");
Run Code Online (Sandbox Code Playgroud)


Onk*_*org 5

使用仅捕获0-9的正则表达式并抛弃其余部分.正则表达式是第一次花费很多的操作.或者做这样的事情:

var sb = new StringBuilder();
var goodChars = "0123456789".ToCharArray();
var input = "40,595";
foreach(var c in input)
{
  if(goodChars.IndexOf(c) >= 0)
    sb.Append(c);
}
var output = sb.ToString();
Run Code Online (Sandbox Code Playgroud)

像我想的那样,我还没编译过..

正如弗雷德里克所说,LINQ也是一种选择


ker*_*ode 5

另外一个选项 ...

private static string RemoveNonNumberDigitsAndCharacters(string text)
{
    var numericChars = "0123456789,.".ToCharArray();
    return new String(text.Where(c => numericChars.Any(n => n == c)).ToArray());
}
Run Code Online (Sandbox Code Playgroud)

  • 消极的呢?(-) 不应该减去这个吗? (2认同)