Pregunta

Así que hoy estaba escribiendo un código que básicamente se ve así:

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

Lo cual no es realmente agradable.Me preguntaba si hay una expresión regular o algo que pueda escribir que reemplace todas las llamadas al Replace() ¿función?

¿Fue útil?

Solución

Puedes usar Regex.Reemplazar().Todos los caracteres se pueden colocar entre corchetes, lo que coincide con cualquier carácter entre corchetes.Algunos caracteres especiales deben tener caracteres de escape con barras invertidas, y aquí uso una cadena @verbatim, por lo que no tengo que utilizar caracteres de escape dobles para el compilador de C#.El primer parámetro es la cadena de entrada y el último parámetro es la cadena de reemplazo.

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

Otros consejos

Para su información, si necesita modificar esta expresión regular, deberá comprender el lenguaje de expresiones regulares.Es bastante simple y, como desarrollador, realmente te debes a ti mismo agregar expresiones regulares a tu caja de herramientas; no las necesitas todos los días, pero poder aplicarlas apropiadamente cuando sea necesario cuando surja la necesidad te compensará. diez veces por el esfuerzo inicial.Aquí hay un enlace a un sitio web con algunos tutoriales de primer nivel, fáciles de seguir y material de referencia sobre expresiones regulares: expresiones-regulares.info.Una vez que tenga una idea de las expresiones regulares y desee utilizarlas en su software, querrá comprar Regex Buddy.Es una herramienta económica y extraordinaria para aprender y utilizar expresiones regulares.I muy Rara vez compra herramientas de desarrollo, pero ésta valió cada centavo.Es aquí: Amigo de expresiones regulares

s/[!@#$%^*_+=\]/ /

Sería la expresión regular para ello...en c# deberías poder usar

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

Aunque mi C# está oxidado...

Si no le interesa profundizar en Regex, aquí hay un par de otras posibilidades de métodos de extensión.

Puede pasar los caracteres específicos que desea reemplazar:

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

O si sabe que desea conservar o eliminar únicamente tipos específicos de caracteres, puede utilizar los distintos métodos que aparecen en char, como IsLetter, IsDigit, IsPunctuation, y 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();
}

Así es como usarías cada una de estas posibilidades:

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

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

Tal vez puedas reducir esto a un par de líneas, si lo deseas, usando una expresión Lambda y 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  "
        }
    }

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top