Как удалить символы из строки с помощью LINQ
Я строку
XQ74MNT8244A
Я хочу удалить все char
из строки.
таким образом, выход будет похож на
748244
как это сделать? Пожалуйста, помогите мне сделать это
8 ответов
два варианта. Использование Linq на .Net 4 (на 3.5 похоже - у него не так много перегрузок всех методов):
string s1 = String.Concat(str.Where(Char.IsDigit));
или, используя регулярное выражение:
string s2 = Regex.Replace(str, @"\D+", "");
Я должен добавить, что IsDigit
и \D
являются Unicode-aware, поэтому он принимает довольно много цифр, кроме 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); })
Как насчет метода расширения (и перегрузки), что делает это для вас:
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();