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

时间:2010-12-06 12:34:33

标签: c# linq string lambda char

我有一个像

这样的字符串

XQ74MNT8244A

我要从字符串中删除所有char

所以输出就像

748244

怎么做? 请帮我这样做

8 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:11)

两个选项。在.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]+之间的支票。

答案 2 :(得分:6)

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

使用LINQ:

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

答案 6 :(得分:2)

这样的东西?


"XQ74MNT8244A".ToCharArray().Where(x => { var i = 0; return Int32.TryParse(x.ToString(), out i); })

答案 7 :(得分:2)

string s = "XQ74MNT8244A";
var x = new string(s.Where(c => (c >= '0' && c <= '9')).ToArray());