Expresión regular para código

Me cuesta encontrar una expresión regular que pueda coincidir con estas cadenas:

@OSMHO:6:75
@4F0SO:5:56
@40KIR:5:15
@VDXBC:4:13
@WYRRA:6:59
@A4AUN:1118:803

Como pueden ver, estas cadenas comienzan con una '@' seguida de 5 caracteres alfanuméricos, luego un ':', luego un número, luego otro ':', luego otro número. Muchas gracias por su ayuda.

preguntado el 16 de mayo de 11 a las 19:05

No encontrará esa expresión regular exacta en ningún lado ... pero después de un vista rápida de la sintaxis de expresiones regulares, puede escribir esto usted mismo en el mismo tiempo que tomó escribir la pregunta. Estoy votando para cerrar como demasiado localizado, ya que no puedo imaginar que nadie más necesite esta expresión regular exacta. -

@BlueRaja, aunque es poco probable que alguien más necesite esta expresión regular exacta, una buena respuesta explicará cómo escribirla, que es mucho más valiosa que la respuesta exacta o un enlace a la sintaxis. -

@eye: una buena respuesta no tiene por qué consistir en más que "leer la documentación", por lo que no tiene ningún valor adicional a la documentación en sí. -

@Ether, "leer la documentación" nunca es una buena respuesta. Lo crea o no, algunas personas requieren más que una especificación para aprender algo nuevo, y la explicación es valiosa. Si "leer la documentación" fuera una buena respuesta, no tendría sentido un sitio como SO. -

4 Respuestas

Para coincidir con un @ al comienzo de un patrón, use ^ (comienzo de línea) seguido de @. Entonces, tu patrón comienza con^@.

Alfanumérico significa cualquier letra de az, AZ y 0-9. Cuando desee representar "uno de los siguientes caracteres" en una expresión regular, la sintaxis es encerrar el conjunto de caracteres en []. En este caso se vería como [a-zA-Z0-9]. Para decir que quieres cinco de ellos, puedes usar {5} después del conjunto de caracteres. Tu expresión ahora parece ^@[a-zA-Z0-9]{5}

Un colon es solo un colon :. Un número de varios dígitos significa que desea uno o más dígitos. Un dígito se representa como [0-9] (es decir, uno de los números entre 0 y 9). "uno o más" está representado por +. Entonces, para agregar dos puntos, uno o más dígitos, dos puntos y uno o más dígitos, debe agregar :[0-9]+:[0-9]+. Tu patrón ahora se ve así: ^@[a-zA-Z0-9]{5}:[0-9]+:[0-9]+.

También puede utilizar la taquigrafía \d en el sentido de "un dígito", por lo que también podría escribir^@[a-zA-Z0-9]{5}:\d+:\d+, aunque eso puede ser complicado porque es posible que necesite barras diagonales inversas adicionales dependiendo del tipo de comillas que use para definir esa expresión. A veces es más fácil evitar los atajos que usan barras invertidas para hacer que el patrón sea más fácil de entender, especialmente cuando está aprendiendo a usar expresiones regulares por primera vez.

Si desea capturar cada parte de esa coincidencia en un grupo, puede usar paréntesis. Por ejemplo, podrías hacer ^@([a-zA-Z0-9]{5}):([0-9]+):([0-9]+) que pondrá el valor entre el @ y primero : en un grupo, el valor entre los dos dos puntos en un segundo grupo y el valor después de los últimos dos puntos en un tercer grupo. Si solo le importa si tiene una coincidencia o no, en lugar de querer cada pieza individual de la coincidencia, puede dejar el paréntesis.

Si construye un patrón como lo hice yo, abordando una pieza a la vez, las expresiones regulares pueden ser muy fáciles.

contestado el 16 de mayo de 11 a las 23:05

Muchas gracias, estaba teniendo dificultades para entender reg ex - Julio diaz

/@[\d\w]{5}:\d+:\d+/

\ d es un dígito, \ wa carácter.

contestado el 16 de mayo de 11 a las 23:05

¿Qué significa la '/' al principio y al final del reg ex? Gracias - Julio diaz

En la mayoría de los entornos para expresiones regulares, delimita el inicio y el final, si su biblioteca en particular no los necesita, puede omitirlos. - tstenner

Estoy usando Java y no parece que le gusten los caracteres de escape. Julio diaz

En ese caso, tendrías que escapar de ellos de nuevo ("@[\\d\\w] etc.") - tstenner

@tstenner: no "la mayoría", solo "algunos". - Bryan Oakley

tratan

#@([a-zA-Z0-9]{5}):([0-9]+):([0-9]+)#i

contestado el 16 de mayo de 11 a las 23:05

Intenté esto en Python:

>>> str = 'this is a test @WYRRA:6:59tyusd'
>>> match = re.search('\@[A-Z0-9]{5}\:[0-9]+\:[0-9]+',str)
>>> print match.group(0)
@WYRRA:6:59

Entonces, la expresión regular es:

  • \@ == el signo @ escapó (aunque no es necesario escapar)
  • [A-Z0-9] {5} == exactamente 5 ocurrencias de cualquier letra mayúscula o dígito numérico
  • \: == el: signo escapado
  • [0-9] + == cualquier dígito numérico una o más veces

Las otras respuestas parecen correctas. Es posible que observe pequeñas diferencias en las expresiones regulares en cada respuesta, como el inicio y el final '/' utilizados en javascript.

contestado el 16 de mayo de 11 a las 23:05

¿Por qué te escapaste de los dos puntos y @? ¿No crees que será confuso para alguien que recién está empezando a aprender expresiones regulares? - Bryan Oakley

Bryan, cuando ingresé mi respuesta no había ninguna indicación de lenguaje de programación. Entonces, pensé que si escapaba sería más seguro. - Cuesta arriba_ ¿Qué '1

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.