regular quitar expresion especiales cualquier caracteres caracter c# regex string

c# - quitar - expresion regular cualquier caracter



Regex para eliminar todos los caracteres especiales de la cadena? (9)

Dependiendo de tu definición de "personaje especial", creo que "[^ a-zA-Z0-9]" probablemente sea el truco. Eso encontraría cualquier cosa que no sea una letra pequeña, una letra mayúscula o un dígito.

Soy completamente incapaz de expresiones regulares, así que necesito ayuda con un problema que creo que sería mejor resolver usando expresiones regulares.

Tengo una lista de cadenas en C #:

List<string> lstNames = new List<string>(); lstNames.add("TRA-94:23"); lstNames.add("TRA-42:101"); lstNames.add("TRA-109:AD"); foreach (string n in lstNames) { // logic goes here that somehow uses regex to remove all special characters string regExp = "NO_IDEA"; string tmp = Regex.Replace(n, regExp, ""); }

Necesito poder recorrer la lista y devolver cada elemento sin ningún carácter especial. Por ejemplo, el ítem uno sería "TRA9423", el ítem dos sería "TRA42101" y el ítem tres sería TRA109AD.

¿Hay alguna expresión regular que pueda lograr esto por mí?

Además, la lista contiene más de 4000 elementos, por lo que necesito que la búsqueda y el reemplazo sean eficientes y rápidos si es posible.

EDITAR: Debería haber especificado que cualquier carácter al lado de az, AZ y 0-9 es especial en mi circunstancia.


Esto debería hacerlo:

[^a-zA-Z0-9]

Básicamente, coincide con todos los caracteres no alfanuméricos.


Para mis propósitos, quería todos los caracteres ASCII en inglés, así que funcionó.

html = Regex.Replace(html, "[^/x00-/x80]+", "")


Puedes usar:

string regExp = "//W";

Esto es equivalente a " [^a-zA-Z0-9] "

/ W coincide con cualquier caracter que no sea una palabra. Equivalente a las categorías Unicode [^/p{Ll}/p{Lu}/p{Lt}/p{Lo}/p{Nd}/p{Pc}] .


Realmente depende de tu definición de personajes especiales. Me parece que una lista blanca en lugar de una lista negra es el mejor enfoque en la mayoría de las situaciones:

tmp = Regex.Replace(n, "[^0-9a-zA-Z]+", "");

Debe tener cuidado con su enfoque actual porque los siguientes dos elementos se convertirán a la misma cadena y, por lo tanto, serán indistinguibles:

"TRA-12:123" "TRA-121:23"


Si no quiere usar Regex, entonces otra opción es usar

char.IsLetterOrDigit

Puede usar esto para recorrer cada carácter de la cadena y solo devolver si es verdadero.


[^a-zA-Z0-9] es una clase de caracteres que coincide con cualquier carácter no alfanumérico.

Alternativamente, [^/w/d] hace lo mismo.

Uso:

string regExp = "[^/w/d]"; string tmp = Regex.Replace(n, regExp, "");


public static string Letters(this string input) { return string.Concat(input.Where(x => char.IsLetter(x) && !char.IsSymbol(x) && !char.IsWhiteSpace(x))); }


tmp = Regex.Replace(n, @"/W+", "");

/w coincide con letras, dígitos y guiones bajos, /W es la versión negada.