去除string中的非数字字符

嘿我正在寻找删除在ASP.NET C#中的string中的非数字字符

所以,即每年40,595

将以40595结束

谢谢

有很多方法,但这应该做(不知道如何执行真正的大string):

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

感觉像一个正则expression式的适合。

 var s = "40,595 pa"; var stripped = Regex.Replace(s, "[^0-9]", ""); 

"[^0-9]"可以replace为@"\D"但我喜欢[^0-9]的可读性。

使用只捕获0-9的正则expression式,然后抛弃其余的。 正则expression式是第一次将花费很多的操作。 或者做这样的事情:

 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(); 

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

正如Fredrik所说,LINQ也是一个select

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

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

另外一个select …

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

那么,你知道数字是什么:0123456789,对吧? 逐字符遍历string; 如果字符是数字,则将其粘贴到临时string的末尾,否则忽略。 C#string可能还有其他的辅助方法,但是这是一种通用的方法,可以在任何地方使用。

这里是使用正则expression式的代码:

 string str = "40,595 pa"; StringBuilder convert = new StringBuilder(); string pattern = @"\d+"; Regex regex = new Regex(pattern); MatchCollection matches = regex.Matches(str); foreach (Match match in matches) { convert.Append(match.Groups[0].ToString()); } int value = Convert.ToInt32(convert.ToString()); 

这是一个不同的实现; 我还需要保留一些其他的字符,但只是从这个列表中删除它们回答了原来的问题。 这是重复调用的linq实现的两倍,并且在第一次调用时启动时间更短。

 StringBuilder sb = new StringBuilder(); char[] textArray = _text.ToCharArray(); foreach (char c in textArray) { switch (c) { case '0' : case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' : case '8' : case '9' : case '.' : case '+' : case '-' : sb.Append(c); break; } } 

被接受的答案是好的,但是它并不考虑NULL值,因此在大多数情况下不可用。

这使我转而使用这些帮手方法。 第一个回答OP,而其他的则可能对那些想做相反事情的人有用:

  /// <summary> /// Strips out non-numeric characters in string, returning only digits /// ref.: https://stackoverflow.com/questions/3977497/stripping-out-non-numeric-characters-in-string /// </summary> /// <param name="input">the input string</param> /// <param name="throwExceptionIfNull">if set to TRUE it will throw an exception if the input string is null, otherwise it will return null as well.</param> /// <returns>the input string numeric part: for example, if input is "XYZ1234A5U6" it will return "123456"</returns> public static string GetNumbers(string input, bool throwExceptionIfNull = false) { return (input == null && !throwExceptionIfNull) ? input : new string(input.Where(c => char.IsDigit(c)).ToArray()); } /// <summary> /// Strips out numeric and special characters in string, returning only letters /// </summary> /// <param name="input">the input string</param> /// <param name="throwExceptionIfNull">if set to TRUE it will throw an exception if the input string is null, otherwise it will return null as well.</param> /// <returns>the letters contained within the input string: for example, if input is "XYZ1234A5U6~()" it will return "XYZAU"</returns> public static string GetLetters(string input, bool throwExceptionIfNull = false) { return (input == null && !throwExceptionIfNull) ? input : new string(input.Where(c => char.IsLetter(c)).ToArray()); } /// <summary> /// Strips out any non-numeric/non-digit character in string, returning only letters and numbers /// </summary> /// <param name="input">the input string</param> /// <param name="throwExceptionIfNull">if set to TRUE it will throw an exception if the input string is null, otherwise it will return null as well.</param> /// <returns>the letters contained within the input string: for example, if input is "XYZ1234A5U6~()" it will return "XYZ1234A5U6"</returns> public static string GetLettersAndNumbers(string input, bool throwExceptionIfNull = false) { return (input == null && !throwExceptionIfNull) ? input : new string(input.Where(c => char.IsLetterOrDigit(c)).ToArray()); } 

有关其他信息,请阅读这篇文章 。