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.