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

3

我有一个字符串,想要

  1. 删除除了所有英文字母(a..z)之外的所有字符
  2. 将所有空格序列替换为单个空格

你会如何在C# 3.0中实现这个功能?

4个回答

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"

5

当然,正则表达式解决方案是最好的(我认为)。但是有人必须在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());

2
顺便提一下,你可以直接写 test.Where(c => ...) 而无需最初的 ToCharArray()。 - Ahmad Mageed
谢谢。我知道字符串实现了IEmumerable<char>,但不知何故这个扩展方法在智能感知中没有出现。 - Botz3000
与正则表达式相比,这对于性能循环效果很好。在test前面有一个额外的前导括号,但我无法在答案中编辑一个字符。 - goodeye

2
当然,使用正则表达式!
string myCleanString = Regex.Replace(stringToCleanUp, @"[\W]", "");
string myCleanString = Regex.Replace(stringToCleanUp, @"[^a-zA-Z0-9]", "");

0

我认为你可以使用正则表达式来完成这个任务,就像Marc和boekwurm提到的那样。

你也可以尝试这些链接 http://www.c-sharpcorner.com/UploadFile/prasad_1/RegExpPSD12062005021717AM/RegExpPSD.aspx

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx

注意:[a-z]:字符范围。匹配指定范围内的任何字符。例如,“[a-z]”匹配从“a”到“z”的任何小写字母字符。

正则表达式还提供特殊字符来表示常见的字符范围。您可以使用“[0-9]”来匹配任何数字,或者您可以使用“\d”。同样,“\D”匹配任何非数字字符。使用“\s”来匹配任何空格字符,并使用“\S”来匹配任何非空格字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接