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

Tho*_*son 10 c# linq string lambda char

我有一个类似的字符串

XQ74MNT8244A

我需要char从字符串中删除所有内容.

所以输出就像

748244

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

Tim*_*son 24

new string("XQ74MNT8244A".Where(char.IsDigit).ToArray()) == "748244"
Run Code Online (Sandbox Code Playgroud)

  • @Øyvind - 没有魔法.`Char.IsDigit`是一个函数,它接受一个`char`并返回一个`bool` - 正是`Where`所期望的.您不必将其包装在匿名函数中.(哦,无论如何编译器都做了很多魔术,比如匿名函数) (5认同)
  • +1.十分优雅.这里有一个问题.`Where(char.IsDigit)`在这种情况下是如何工作的?我认为你必须在这里写`Where(c => char.IsDigit(c))` 编译器在这种情况下是否有所作为?这里将解释一下解释. (2认同)

Kob*_*obi 11

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

string s1 = String.Concat(str.Where(Char.IsDigit));
Run Code Online (Sandbox Code Playgroud)

或者,使用正则表达式:

string s2 = Regex.Replace(str, @"\D+", "");
Run Code Online (Sandbox Code Playgroud)

我应该添加它IsDigit并且\D是Unicode识别的,因此它接受除0-9之外的相当多的数字,例如"542abc??".
您可以轻松地适应他们之间的单向09,或[^0-9]+.

  • 这里使用string.concat比我想要使用的.ToArray()更好. (2认同)

Ali*_*tad 6

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