如何使用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٣٤"
。
您可以轻松地将它们调整为0
到9
之间的检查,或者[^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();