Альтернатива String.Replace - PullRequest
       16

Альтернатива String.Replace

19 голосов
/ 23 сентября 2008

Итак, я писал сегодня код, который в основном выглядит следующим образом:

string returnString = s.Replace("!", " ")
            .Replace("@", " ")
            .Replace("#", " ")
            .Replace("$", " ")
            .Replace("%", " ")
            .Replace("^", " ")
            .Replace("*", " ")
            .Replace("_", " ")
            .Replace("+", " ")
            .Replace("=", " ")
            .Replace("\", " ")

Что не очень приятно. Мне было интересно, есть ли регулярное выражение или что-то, что я мог бы написать, который заменит все вызовы функции Replace()?

Ответы [ 5 ]

33 голосов
/ 23 сентября 2008

Вы можете использовать Regex.Replace () . Все символы могут быть помещены в квадратные скобки, что соответствует любому символу в квадратных скобках. Некоторые специальные символы необходимо экранировать с помощью обратной косой черты, и я здесь использую строку @verbatim, поэтому мне не нужно дважды экранировать их для компилятора C #. Первый параметр - это строка ввода, а последний параметр - строка замены.

var returnString = Regex.Replace(s,@"[!@#\$%\^*_\+=\\]"," ");
2 голосов
/ 23 сентября 2008

К вашему сведению - если вам нужно изменить это регулярное выражение, вы должны понимать язык регулярных выражений. Это довольно просто, и вы, как разработчик, действительно должны сами добавлять регулярные выражения в свой инструментарий - они вам не нужны каждый день, но возможность применять их там, где это необходимо, в случае необходимости, окупится в десять раз за первоначальное усилие. Вот ссылка на веб-сайт с некоторыми первоклассными, простыми в использовании руководствами и справочными материалами по регулярным выражениям: регулярные выражения.info . Как только вы почувствуете регулярные выражения и захотите использовать их в своем программном обеспечении, вы захотите купить Regex Buddy. Это дешевый и необычный инструмент для изучения и использования регулярных выражений. Я очень редко покупаю инструменты разработки, но этот стоил каждого копейки. Это здесь: Regex Buddy

0 голосов
/ 17 октября 2008

Может быть, вы можете уменьшить это до пары строк, если хотите, используя лямбда-выражение и List<>, ForEach

using System.Collections.Generic;

namespace ReplaceWithSpace 
 {
    class Program 
    {
        static void Main(string[] args) 
        {
            string someString = "#1, 1+1=2 $string$!";

            var charsToRemove = new List<char>(@"!@#$%^*_+=\");
            charsToRemove.ForEach(c => someString = someString.Replace(c, ' '));

            System.Diagnostics.Debug.Print(someString); //" 1, 1 1 2  string  "
        }
    }

}
0 голосов
/ 23 сентября 2008

Если вы не хотите углубляться в Regex, вот пара других возможностей метода расширения.

Вы можете передать конкретные символы, которые хотите заменить:

static public string ReplaceCharsWithSpace(this string original, string chars)
{
    var result = new StringBuilder();
    foreach (var ch in original)
    {
        result.Append(chars.Contains(ch) ? ' ' : ch);
    }
    return result.ToString();
}

Или, если вы знаете, что хотите сохранить или удалить только определенные типы символов, вы можете использовать различные методы в char, например IsLetter, IsDigit, IsPunctuation и IsSymbol :

static public string ReplaceNonLetterCharsWithSpace(this string original)
{
    var result = new StringBuilder();
    foreach (var ch in original)
    {
        result.Append(char.IsLetter(ch) ? ch : ' ');
    }
    return result.ToString();
}

Вот как вы можете использовать каждую из этих возможностей:

string s = "ab!2c";
s = s.ReplaceCharsWithSpace(@"!@#$%^*_+=/");  // s contains "ab  c"

string t = "ab3*c";
t = t.ReplaceNonLetterCharsWithSpace();  // t contains "ab  c"
0 голосов
/ 23 сентября 2008
s/[!@#$%^*_+=\]/ /

Было бы регулярным выражением для этого ... в C # вы должны иметь возможность использовать

Regex.Replace(yourstring, "[!@#$%^*_+=\]", "" ); 

Хотя мой C # ржавый ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...