Alternatywą dla string.replace

głosy
19

Więc pisałem jakiś kod dzisiaj, że w zasadzie wygląda to tak:

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

Co nie jest naprawdę ładny. Zastanawiałem się, czy istnieje regex lub coś, co mógłbym napisać, że byłoby wymienić wszystkie połączenia do Replace()funkcji?

Utwórz 23/09/2008 o 00:53
źródło użytkownik
W innych językach...                            


5 odpowiedzi

głosy
33

Można użyć Regex.Replace () . Wszystkie znaki mogą być umieszczone w nawiasach kwadratowych, która dopasowuje dowolny znak w nawiasach kwadratowych. Niektóre znaki specjalne muszą być uciekł z ukośniki, a używam @verbatim ciąg tutaj, więc nie trzeba ich dwukrotnie uciec do kompilatora C #. Pierwszym parametrem jest ciąg wejściowy i ostatni parametr jest ciągiem wymiana.

var returnString = Regex.Replace(s,@"[!@#\$%\^*_\+=\\]"," ");
Odpowiedział 23/09/2008 o 00:55
źródło użytkownik

głosy
2

FYI - jeśli trzeba zmodyfikować ten regex, trzeba mieć zrozumienie zwykłego języka ekspresji. Jest to dość proste, a jako deweloper naprawdę zawdzięczam to do siebie, aby dodać wyrażeń regularnych do zestawu narzędzi - nie trzeba ich na co dzień, ale jest w stanie zastosować je odpowiednio w razie potrzeby, gdy trzeba będzie wynikać będzie zapłacić z powrotem dziesięciokrotnie do początkowego wysiłku. Tu jest link do strony internetowej, z jakimś najwyższym poziomie, łatwe do naśladowania samouczków i materiałów odniesienia na wyrażeniach regularnych: regular-expressions.info . Po poczuć wyrażeń regularnych i chcesz je wykorzystać w programie, będziemy chcieli kupić Regex Buddy. Jest to tani i niezwykłe narzędzie do nauki i korzystania z wyrażeń regularnych. I bardzo rzadko zakupu narzędzi programistycznych, ale ten był wart każdego grosza. Jest tutaj: Regex Buddy

Odpowiedział 23/09/2008 o 01:21
źródło użytkownik

głosy
0

Być może można to ograniczyć do kilku linii, w razie potrzeby, za pomocą wyrażenia lambda i 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  "
        }
    }

}
Odpowiedział 17/10/2008 o 03:37
źródło użytkownik

głosy
0

Jeśli nie masz ochoty zagłębiać się w Regex, oto kilka innych możliwości przedłużenia sposobem.

można przekazać w szczególnych znaków, które chcesz wymienić:

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();
}

Lub jeśli wiesz, że chcesz, aby tylko utrzymać się rozebrać lub tylko określone typy znaków, można użyć różnych metod w char, takich jak IsLetter, IsDigit, IsPunctuation, i 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();
}

Oto jak byłoby użyć każdej z tych możliwości:

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

string t = "ab3*c";
t = t.ReplaceNonLetterCharsWithSpace();  // t contains "ab  c"
Odpowiedział 23/09/2008 o 02:38
źródło użytkownik

głosy
0
s/[!@#$%^*_+=\]/ /

Regex byłoby dla niego ... w c # powinny mieć możliwość korzystania

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

Choć mój C # jest zardzewiały ..

Odpowiedział 23/09/2008 o 00:57
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more