2009-08-31 2 views
3

У меня есть строка и чтоC# 3.0 Удалить символы из строки

  1. удаления всех символов, кроме всех английских букв (a..z)
  2. заменить все непечатаемые последовательности с одним пробелом

Как бы вы это сделали с C# 3.0?

ответ

8

Regex (отредактировано)?

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

Я думаю, вы можете сделать это с регулярным выражением. Какой Марк и боккурм упоминается.

Попробуйте эти ссылки также 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

Конечно, решение 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()); 
+2

BTW, вы можете написать test.Where (c => ...) непосредственно без начального ToCharArray(). –

+0

Спасибо. Я знал, что string реализует IEmumerable , но каким-то образом этот метод расширения не появился в intellisense. – Botz3000

+0

Это хорошо работает для цикла производительности по сравнению с регулярным выражением. Есть дополнительные ведущие парсеры в самом начале, перед 'test', но я не могу редактировать один символ в ответе. – goodeye