2009-08-31 58 views
3

刪除字符我有一個​​字符串和如何C#3.0從字符串

  1. 刪除除所有英文字母的所有字符(a到z)
  2. 替換所有空格序列有一個空格

你會如何用C#3.0做到這一點?

回答

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" 
2

使用當然正則表達式!

string myCleanString = Regex.Replace(stringToCleanUp, @"[\W]", ""); 
string myCleanString = Regex.Replace(stringToCleanUp, @"[^a-zA-Z0-9]", ""); 
0

我想你可以用正則表達式來做到這一點.What 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」來匹配任何非空格字符。

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()。 – 2009-08-31 09:29:56

+0

謝謝。我知道字符串實現IEmumerable ,但不知何故,該擴展方法沒有出現在intellisense中。 – Botz3000 2009-08-31 09:32:48

+0

與正則表達式相比,此效果表現良好。在'test'前面有一個額外的領先的parens,但我不能在答案中編輯一個字符。 – goodeye 2012-04-05 01:31:45