2012-10-01 28 views
13

Soy nuevo en regex y yo estoy tratando de llegar a algo que se ajuste a un texto, como a continuación:de expresiones regulares con comodines para que coincida con cualquier carácter

ABC: (z) Jan 02 de 1999 \ n

Notas:

  • texto siempre se iniciará con "ABC:"
  • puede haber cero, uno o más espacios entre ':' y (Z).
  • variaciones de (z) también es posible - (zz), (zzzzzz) .. etc, pero siempre un carácter no dígitos encerrado en "()"
  • puede haber cero, uno o más espacios entre (z) y Jan
  • enero podría ser enero, enero, etc
  • fecha couldbe en cualquier formato y puede/no puede contener otro texto como parte de ella de modo realmente me gustaría saber si hay una expresión regular que pueda utilizar para capturar cualquier cosa y todo lo que se encuentra entre '(z)' y '\ n'

¡Cualquier ayuda es muy apreciada! Gracias

+2

¿Qué has intentado hasta ahora? ¿Qué está haciendo eso es diferente de lo que quieres? – octern

+0

Tenga en cuenta: Estoy usando regexplanet.com/advanced/java/index.html para probar mis expresiones regulares ... lo siento, debería haber mencionado esto antes. Entonces, usando la secuencia de muestra "ABC: (z) 2 de febrero de 1988 \ n" ... Mi resultado para el Grupo 2 debería ser "(z) 2 de febrero de 1988" – chapstick

Respuesta

26

El siguiente debe funcionar:

ABC: *\([a-zA-Z]+\) *(.+) 

Explicación:

ABC:   # match literal characters 'ABC:' 
*    # zero or more spaces 
\([a-zA-Z]+\) # one or more letters inside of parentheses 
*    # zero or more spaces 
(.+)   # capture one or more of any character (except newlines) 

para obtener su agrupación deseada basándose en los comentarios a continuación, puede utilizar el siguiente:

(ABC:) *(\([a-zA-Z]+\).+) 
+0

Gracias por la expresión, por favor, consulte mi comentario para deltree below – chapstick

+0

@chapstick - Se agregó otra versión que debería tener una coincidencia del grupo 2 desde el paréntesis hasta el final de la línea. –

+0

¡Gracias que funcionó! – chapstick

0

Esto debería cumplir con sus requisitos.

ABC:\s*(\(\D+\)\s*.*?)\\n

Aquí está con algunas pruebas http://www.regexplanet.com/cookbook/ahJzfnJlZ2V4cGxhbmV0LWhyZHNyDgsSBlJlY2lwZRiEjiUM/index.html

Futher lectura en expresiones regulares: http://www.regular-expressions.info/characters.html

+0

Gracias por las respuestas. Estoy usando http://www.regexplanet.com/advanced/java/index.html para probar mis expresiones regulares ... lo siento, debería haber mencionado esto antes. Entonces, usando la cadena de muestra "ABC: (z) 2 de febrero de 1988 \ n" ... Mi resultado para el Grupo 2 debería ser "(z) 2 de febrero de 1988" ... No puedo obtenerlo usando ninguna de las expresiones anteriores :( – chapstick

+0

@chapstick 'captura todo lo que se encuentre entre '(z)' y '\ n'', entonces ¿quieres (z) y \ n en el grupo? ¿Y por qué el grupo 2? – deltree

+0

Quiero (z) pero solo cosas hasta y sin incluir '\ n'. Intencionalmente evité detallar por qué el Grupo 2 ... otra cosa usará los valores en el Grupo 2 para hacer un mayor procesamiento :) – chapstick

4

Sin conocer la aplicación de expresiones regulares exacto que está haciendo uso de, sólo puedo dar consejos generales . (La sintaxis seré Perl ya que eso es lo que sé, algunos idiomas requerirán ajustes)

En cuanto a ABC: (z) jan 02 1999 \n

  • Lo primero que debe coincidir es ABC: Así que usando nuestra expresión regular es /ABC:/
  • Usted dice que ABC siempre está al comienzo de la cadena, por lo que /^ABC/ se asegurará de que ABC esté al comienzo de la cadena.

  • Puede hacer coincidir espacios con la directiva \s (tenga en cuenta el caso).Con todas las directivas que puede coincidir con uno o más + (o 0 o más con *)

  • Es necesario escapar el uso de ( y ) ya que es un carácter reservado. por lo \(\)

  • que puede coincidir con cualquier espacio o no carácter de nueva línea con .

  • Puede coincidir con nada en absoluto con .* pero hay que tener cuidado de no eres demasiado codicioso y capturar todo.

Para capturar lo que ha pedido. Me gustaría utilizar /^ABC:\s*\(.+?\)\s*(.+)$/

que leí como:

Empieza con ABC:

puede tener algunos espacios

tiene (

tiene algunos caracteres

ha)

puede tener algunos espacios

y luego capturar todo hasta el final de la línea (que es $).

le recomiendo mantener una copia de la siguiente que pone sobre http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

Cuestiones relacionadas