Альтернатива String.Replace
Итак, сегодня я писал код, который выглядит примерно так:
string returnString = s.Replace("!", " ")
.Replace("@", " ")
.Replace("#", " ")
.Replace("$", " ")
.Replace("%", " ")
.Replace("^", " ")
.Replace("*", " ")
.Replace("_", " ")
.Replace("+", " ")
.Replace("=", " ")
.Replace("\", " ")
Что не очень приятно. Мне было интересно, есть ли регулярное выражение или что-то, что я мог бы написать, что заменит все вызовы функции Replace()
?
Ответы
Ответ 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 "
}
}
}