Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

var returnString = Regex.Replace(s,@"[[email protected]#\$%\^*_\+=\\]"," ");

Ответ 2

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

Ответ 3

s/[[email protected]#$%^*_+=\]/ /

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

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

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

Ответ 4

Если вы не хотите вникать в 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(@"[email protected]#$%^*_+=/");  // s contains "ab  c"

string t = "ab3*c";
t = t.ReplaceNonLetterCharsWithSpace();  // t contains "ab  c"

Ответ 5

Возможно, вы можете уменьшить это до нескольких строк, если хотите, с помощью выражения Lambda и 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>(@"[email protected]#$%^*_+=\");
            charsToRemove.ForEach(c => someString = someString.Replace(c, ' '));

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

}