Как удалить символы из строки с помощью LINQ - PullRequest
10 голосов
/ 06 декабря 2010

У меня есть строка вроде

XQ74MNT8244A

Мне нужно удалить все char из строки.

так что вывод будет как

748244

Как это сделать? Пожалуйста, помогите мне сделать это

Ответы [ 8 ]

23 голосов
/ 06 декабря 2010
new string("XQ74MNT8244A".Where(char.IsDigit).ToArray()) == "748244"
11 голосов
/ 06 декабря 2010

Два варианта.Используя Linq на .Net 4 (на 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]+.

6 голосов
/ 06 декабря 2010
string value = "HTQ7899HBVxzzxx";
Console.WriteLine(new string(
     value.Where(x => (x >= '0' && x <= '9'))
     .ToArray()));
2 голосов
/ 06 декабря 2010
string s = "XQ74MNT8244A";
var x = new string(s.Where(c => (c >= '0' && c <= '9')).ToArray());
2 голосов
/ 06 декабря 2010

Как то так?


"XQ74MNT8244A".ToCharArray().Where(x => { var i = 0; return Int32.TryParse(x.ToString(), out i); })
2 голосов
/ 06 декабря 2010

Использование LINQ:

public string FilterString(string input)
{
    return new string(input.Where(char.IsNumber).ToArray());
}
2 голосов
/ 06 декабря 2010

Если вам нужны только цифры и вы действительно хотите Linq, попробуйте это:

youstring.ToCharArray().Where(x => char.IsDigit(x)).ToArray();
2 голосов
/ 06 декабря 2010

Как насчет метода расширения (и перегрузки), который делает это для вас:

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