2010-06-24 27 views

Respuesta

68

Si desea hacer coincidir símbolos no alfanuméricos, simplemente use \W|_.

Regex pattern = new Regex(@"\W|_"); 

Esto coincidirá con cualquier cosa excepto 0-9 y a-z. Información sobre la clase de caracteres \W y otras disponibles aquí.

+2

No desafiar a un gran maestro, pero ¿no te refieres a '\ W'? '\ w' (minúscula w) coincide con todos los caracteres de palabra. – Alan

+4

Esto es casi completamente incorrecto. –

+2

Sin embargo, obtuvo 3 votos positivos. – Alan

2

Se puede comprobar la condición opuesta?

Match match = Regex.Match(@"^([a-zA-Z0-9]+)$"); 
if (!match.Success) { 
    // it's alphanumeric 
} else { 
    // it has one of those characters in it. 
} 
10

También podría evitar expresiones regulares si quieres:

return s.Any(c => !char.IsLetterOrDigit(c)) 
+1

Ahora para crédito adicional: ¿cuál es más eficiente? – Alan

+0

Hehe .. Algunas veces solo TIENES que usar una expresión regular para todo :) Aunque amo las expresiones regulares, a menudo es mejor evitarlas. – simendsjo

+0

@ Alan - Haré una prueba más tarde (a menos que alguien más intervenga) pero estoy seguro de que esto es un poco más rápido. – ChaosPandion

2

No he tenido toda su pregunta, pero esta expresión regular coincidirá con esas cadenas que contiene al menos un carácter no alfanumérico. Eso incluye espacios en blanco (aunque no se podía ver en su lista)

[^\w]+ 
2

Su expresión regular solo necesita pequeños retoques. El guion se usa para formar rangos como A-Z, por lo tanto, si desea hacer coincidir un guion literal, debe escapar con una barra diagonal inversa o moverlo al final de la lista. También necesita escapar de los corchetes porque son los delimitadores de la clase de caracteres. Entonces, al principio, deshazte de ese signo de interrogación y estarás en el negocio.

Regex symbolPattern = new Regex(@"[[email protected]#$%^&*()_+=\[{\]};:<>|./?,-]"); 

Si solo desea hacer coincidir los caracteres de puntuación ASCII, esta es probablemente la forma más sencilla. \W coincide con el espacio en blanco y los caracteres de control además de la puntuación, y los compara de todo el rango Unicode, no solo ASCII.

Parece que le faltan algunos caracteres: la barra diagonal inversa, el apóstrofo y las comillas. La adición de los que da:

@"[[email protected]#$%^&*()_+=\[{\]};:<>|./?,\\'""-]" 

Por último, es una buena idea utilizar siempre los literales C# 's literales de cadena (@"...") para expresiones regulares; te ahorra muchas molestias con las barras diagonales inversas. Las comillas se escapan al duplicarlas.

Cuestiones relacionadas