如何使用LINQ从字符串中删除字符

我有一个类似的字符串

XQ74MNT8244A

我需要删除字符串中的所有char

所以输出就像

748244

这该怎么做? 请帮我这样做

 new string("XQ74MNT8244A".Where(char.IsDigit).ToArray()) == "748244" 

两种选择。 在.Net 4上使用Linq(在3.5上它是相似的 – 它没有所有方法的那么多重载):

 string s1 = String.Concat(str.Where(Char.IsDigit)); 

或者,使用正则表达式:

 string s2 = Regex.Replace(str, @"\D+", ""); 

我应该补充一点, IsDigit\D是支持Unicode的,所以它接受0-9之外的相当多的数字,例如"542abc٣٤"
您可以轻松地将它们调整为09之间的检查,或者[^0-9]+

 string value = "HTQ7899HBVxzzxx"; Console.WriteLine(new string( value.Where(x => (x >= '0' && x <= '9')) .ToArray())); 

如果您只需要数字并且您真的想要Linq试试这个:

 youstring.ToCharArray().Where(x => char.IsDigit(x)).ToArray(); 

使用LINQ:

 public string FilterString(string input) { return new string(input.Where(char.IsNumber).ToArray()); } 

像这样的东西?

 "XQ74MNT8244A".ToCharArray().Where(x => { var i = 0; return Int32.TryParse(x.ToString(), out i); }) 
 string s = "XQ74MNT8244A"; var x = new string(s.Where(c => (c >= '0' && c <= '9')).ToArray()); 

如何为您执行此操作的扩展方法(和重载):

  public static string NumbersOnly(this string Instring) { return Instring.NumbersOnly(""); } public static string NumbersOnly(this string Instring, string AlsoAllowed) { char[] aChar = Instring.ToCharArray(); int intCount = 0; string strTemp = ""; for (intCount = 0; intCount <= Instring.Length - 1; intCount++) { if (char.IsNumber(aChar[intCount]) || AlsoAllowed.IndexOf(aChar[intCount]) > -1) { strTemp = strTemp + aChar[intCount]; } } return strTemp; } 

重载是这样你可以保留“ – ”,“$”或“。” 如果你愿意(而不是严格的数字)。

用法:

 string numsOnly = "XQ74MNT8244A".NumbersOnly();