2010-12-11 20 views
10

Potrzebujemy funkcji C#, która usunie wszystkie znaki specjalne z ciągu znaków.Regex usuń znaki specjalne

Co więcej, czy można zmienić "George's" na "George" (usunąć zarówno pojedynczy cudzysłów, jak i znaki)?

+3

Przynajmniej określenie»znak specjalny " – BoltClock

+0

masz na myśli: usunąć wszystko, co nie jest literą, cyfrą lub spacją? –

Odpowiedz

37

Ta metoda spowoduje usunięcie wszystkich elementów oprócz liter, cyfr i spacji. Będzie on również usunąć wszelkie "lub«a następnie znaków s.

public static string RemoveSpecialCharacters(string input) 
{ 
    Regex r = new Regex("(?:[^a-z0-9 ]|(?<=['\"])s)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled); 
    return r.Replace(input, String.Empty); 
} 
+0

Cześć Ryan, dzięki za kod. Działa dobrze. Czy można zignorować białą przestrzeń. Chcę, żeby tam była biała przestrzeń. Dzięki. – user374760

+0

Jeśli jest to odpowiedź, nie zapomnij oznaczyć go jako takiego. –

+0

Cześć Ryan, Nie chcemy usuwać białych znaków ze sznurka. Daj mi znać, jak to zrobić. Oznacziłem to jako rozwiązanie. Dzięki. – user374760

0

Pomogłoby, gdybyśmy wiedzieli, co to jest specjalny znak. Oto funkcja, mimo że załatwi

public bool IsSpecialChar(char c) { 
    // Need you to fill this out 
} 

public string RemoveSpecialChars(string s) { 
    var builder = new System.Text.StringBuilder(); 
    foreach (var cur in s) { 
    if (!IsSpecialChar(cur)) { 
     builder.Append(cur); 
    } 
    } 
    return builder.ToString(); 
} 
0

jej lepiej zdefiniować listę znaków, które chcesz zachować, zamiast wyliczać wszystkie inne nie chcesz. Na przykład, użycie perlregexes s/[^A-Za-z0-9]+//g usunie wszelki znak nie będący wyrazem (przepraszam, nie jestem zaznajomiony z wyrażeń regularnych c: D).

Dla innego problemu, można zdefiniować co usunąć na podstawie poprzedniego wyrazu jeśli dbasz o niektórych przypadkach (jak tylko usunięcie 's jeśli istnieje słowo przed nim), w przeciwnym razie po prostu usunąć wszystkie wystąpienia 's.

+1

Myślę, że chodziło ci o' s/\ W + // g' ('tr ///' nie jest wyposażone w regex, a zbiór "słowo" znaków "zawiera dużo więcej niż tylko" [A-Za-z0-9] "). Wersja C# będzie miała postać' Regex.Replace (input, @ "\ W +", String.Empty) '. –

+0

@Alan Moore you mam rację, zapominam o tym =). Regardi Jeśli chodzi o znaki słowne, jestem tego świadomy, naprawdę myślałem, że tego właśnie chce. – javs

+0

Tak, rzuciłem w to trochę o znakach słownych, żeby uratować nas od kary z tchristem. : D –

1
public static string RemoveSpecialCharacters(string input) 
{  
    Regex r = new Regex(
        "(?:[^a-zA-Z0-9 ]|(?<=['\"])s)", 
        RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled); 
    return r.Replace(input, String.Empty);  
} 

odpowiedź Ryana ma rację. Wystarczy dodać A-Z jak wielu ludzi będzie go potrzebować.