C#3.0从字符串中删除字符

Kar*_*ten 3 c# string

我有一个字符串,该怎么做

  1. 删除除英文字母以外的所有字符(a..z)
  2. 用一个空格替换所有空格序列

你会怎么用C#3.0做到这一点?

Mar*_*ell 8

正则表达式(编辑)?

string s = "lsg  @~A\tSd 2£R3 ad"; // note tab
s = Regex.Replace(s, @"\s+", " ");
s = Regex.Replace(s, @"[^a-zA-Z ]", ""); // "lsg A Sd R ad"
Run Code Online (Sandbox Code Playgroud)


Bot*_*000 5

当然,Regex解决方案是最好的(我认为).但有人有必要在LINQ中这样做,所以我有一些乐趣.你去:

bool inWhiteSpace = false;
string test = "lsg  @~A\tSd 2£R3 ad";
var chars = test.Where(c => ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || char.IsWhiteSpace(c))
                 .Select(c => {
                     c = char.IsWhiteSpace(c) ? inWhiteSpace ? char.MinValue : ' ' : c;
                     inWhiteSpace = c == ' ' || c == char.MinValue;
                     return c;
                 })
                 .Where(c => c != char.MinValue);
string result = new string(chars.ToArray());
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,你可以在没有初始ToCharArray()的情况下直接编写test.Where(c => ...). (2认同)