2009-11-18 8 views
5

Proporcione una solución para escribir una expresión regular como la siguiente en C# .NET: Necesitaría un RegEx para Non-Alphabets (de la A a la Z) y Non- Alphabets (de la A a la Z) Numerales (0 a 9). Significa decirlo de forma inversa para obtener expresiones regulares distintas de los alfabetos y otros números (0 a 9).Regex para no alfabetos y sin numerales

Por favor, sugiera la solución para la misma.

Respuesta

17

Se puede utilizar un negated character class aquí:

[^a-zA-Z0-9] 

Por encima de expresión regular coincidirá con un único carácter que no puede ser una letra mayúscula o minúscula latino o un número.

El ^ al inicio de la clase de caracteres (la parte entre [ y ]) niega la clase completa para que coincida con cualquier cosa que no en la clase, en lugar de un comportamiento normal clase de caracteres.

para que sea útil, es probable que desee uno de esos:

  1. Cero o más de dichos caracteres

    [^a-zA-Z0-9]* 
    

    El asterisco (*) aquí significa que la parte precedente puede repetirse cero o más veces

  2. Uno o más de tales caracteres

    [^a-zA-Z0-9]+ 
    

    el signo más (+) aquí significa que la parte anterior se puede repetir una o más veces.

  3. Una cadena completa (posiblemente vacía), que consiste solamente en caracteres tales

    ^[^a-zA-Z0-9]*$ 
    

    Aquí los personajes ^ y $ tienen un significado que anchors, coincidiendo con el inicio y el final de la cadena, respectivamente. Esto asegura que toda la cadena consta de caracteres que no están en esa clase de caracteres y ningún otro personaje aparece antes o después de ellos.

  4. Una cadena completa (no vacío), que consiste solamente en caracteres tales

    ^[^a-zA-Z0-9]+$ 
    

Abundando un poco, esto no (y no puede) asegurarse de que no lo hará use otros caracteres, posiblemente de otros scripts. La cadena аеΒ sería completamente válida con la expresión regular anterior, porque usa letras del alfabeto griego y cirílico. Además, hay otras trampas. La cadena á pasará por encima de la expresión regular, mientras que la cadena ́a no (porque construye la letra á de la letra ay una marca diacrítica combinada).

Por lo tanto, las clases de caracteres negadas deben tomarse con cuidado.

También puede utilizar números de otras secuencias de comandos, si quería: ١٢٣ :-)

Se puede utilizar la clase de caracteres

[^\p{L&}\p{Nd}] 

si tiene que hacerse cargo de las cosas de arriba.

2

simplemente niega la clase:

[^A-Za-z0-9]

+0

Gracias. Gracias. Gracias. Gracias. :) – sukumar

+0

Vaya ... memoria de los dedos. :-(corregido :-) – beggs

2

Obedecer uso entorno local:

[^[:alnum:]] 
+0

+1. Muy buen punto. – Joey

+1

Desafortunadamente uno terrible para .NET ya que no son compatibles con las expresiones de corchetes POSIX. De acuerdo con http://www.regular-expressions.info/posixbrackets.html la expresión '[\ p {L &} \ p {Nd}]' es un posible reemplazo para los sabores de RE con reconocimiento Unicode. – Joey