2010-12-11 48 views
10

Necesitamos una función C# que elimine todos los caracteres especiales de una cadena.Regex eliminar caracteres especiales

Además, ¿es posible cambiar "George's" por "George" (eliminar tanto comillas simples como caracteres)?

+3

Al menos definir' carácter especial " – BoltClock

+0

quieres decir: eliminar todo lo que no es letra, número o espacio? –

Respuesta

37

Este método eliminará todo excepto letras, números y espacios. Además, eliminará cualquier "o 'seguido de la letra 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

Hola Ryan, gracias por el código. Está funcionando bien. ¿Es posible ignorar el espacio en blanco? Quiero que el espacio en blanco esté allí. Gracias. – user374760

+0

Si esta es la respuesta, no olvide marcarla como tal. –

+0

Hola Ryan, No queremos eliminar los espacios en blanco de la cadena. Por favor, hágame saber cómo hacerlo. Lo marqué como una solución. Gracias. – user374760

0

Ayudaría si supiéramos que personaje especial era. Aquí está una función a pesar de que va a hacer el truco

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

Su mejor definir una lista de caracteres que desea conservar en lugar de enumerar todos los demás que no quieres. Por ejemplo, el uso de perlregexes s/[^A-Za-z0-9]+//g eliminará cualquier carácter que no sea de palabra (lo siento, no estoy familiarizado con las expresiones regulares de C#: D).

Para su otro problema, podría definir qué eliminar según la palabra anterior si le importan ciertos casos (como eliminar solo 's si hay una palabra antes), de lo contrario, simplemente elimine todas las ocurrencias de 's.

+1

Creo que querías decir' s/\ W + // g' ('tr ///' no tiene potencia regex, y el conjunto de "palabra" caracteres "incluye mucho más que simplemente' [A-Za-z0-9] '). La versión de C# sería' Regex.Replace (input, @ "\ W +", String.Empty) '. –

+0

@Alan Moore usted tienen razón, me olvido de eso =). Regardi ng personajes de palabras, soy consciente de eso, de hecho pensé que eso era lo que él quería. – javs

+0

Sí, eché un poco sobre los personajes de palabras para salvarnos a ambos de regañarles. : 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);  
} 

respuesta de Ryan es correcto. Sólo tiene que añadir A-Z, así como muchas personas que necesitarían.

Cuestiones relacionadas