2011-03-01 17 views
31

He estado golpeando mi cabeza contra la pared tratando de hacer lo que debería ser una simple expresión regular - Necesito hacer coincidir, por ejemplo donde la parte 12 podría ser uno o dos dígitos, luego un no alfanumérico opcional como :.-,_ etc., luego la cadena po.Regex para 1 o 2 dígitos, opcional no alfanumérico, 2 alphas conocidas

El uso eventual va a estar en C# pero me gustaría que también funcione en el grep en la línea de comandos. No tengo acceso a C#, lo que no ayuda.

Respuesta

3
^[0-9][0-9]?[^A-Za-z0-9]?po$ 

Puedes probarlo aquí: http://www.regextester.com/

Para utilizar esto en C#,

Regex r = new Regex(@"^[0-9][0-9]?[^A-Za-z0-9]?po$"); 
if (r.Match(someText).Success) { 
    //Do Something 
} 

Recuerde, @ es un símbolo útil que significa que el analizador toma la cadena literal (por ejemplo, se no es necesario escribir \\ para una barra invertida)

45
^[0-9]{1,2}[:.,-]?po$ 

Agregue cualquier otro valor no alfa permitido caracteres numéricos a los corchetes del medio para permitir que sean analizados también.

+1

... pero agrégalos antes del '-' o obtendrás resultados sorprendentes. –

18
^\d{1,2}[\W_]?po$ 

\d define un número y {1,2} significa 1 o dos de la expresión antes, \W define un carácter no palabra.

+0

\ W no incluye _, que quería –

+0

Eso es correcto, lo cambió a [\ W | _] – stema

+0

Corregido a '[\ W_]'. –

Cuestiones relacionadas