2012-05-12 24 views
19

tengo esta cadena:Regex para que coincida con la primera aparición de una cadena

la ciudad - Este es un texto. Esto es algo más, y continúa aquí.

Me gustaría dividir la cuerda en el primer '-' para encontrar 'ciudad' (solo una palabra de muestra, puede ser otras palabras también). Además, para encontrar el resto del texto después de '-'.

construí esta expresión:

(^[\D\W\S]*)(-)([\D\W\S]*) 

Pero esto se encuentra la última aparición de '-' en lugar de la primera.

¿Cómo puedo detenerme en la primera aparición?

+4

mayoría de los lenguajes tienen funciones para dividir una cadena por un cierto carácter e incluso le permiten limitar el número de splits. Deberías usar tal función. Si nos permite saber qué idioma está utilizando, podemos ayudarlo más. –

+0

Depende del motor de expresiones regulares. ¿Que estas usando? –

+3

Vamos chicos, ¿por qué downvote esto? Es una buena pregunta, él hizo un esfuerzo de investigación en eso, y mostró lo que intentó. Esto es mucho más de lo que obtenemos de la mayoría de los recién llegados. Entonces, de mí, usuario1391459, ¡bienvenido a StackOverflow, y espera! (También es una buena idea elegir un mejor nombre de usuario :)) –

Respuesta

38

La solución más sencilla sería la de prohibir explícitamente el tablero para formar parte del primer grupo:

^([^-]*) - (.*) 

Explicación:

^  # Start of string 
([^-]*) # Match any number of characters except dashes 
\ - \ # Match a dash (surrounded by spaces) 
(.*)  # Match anything that follows 

Sin embargo, esto sería un error si la cadena de podía contiene un guión en el primer grupo (simplemente no rodeado de espacios). Si ese es el caso, entonces usted puede hacer uso de cuantificadores perezosos:

^(.*?) - (.*) 

Explicación:

^  # Start of string 
(.*?) # Match any number of characters, as few as possible 
\ - \ # Match a dash (surrounded by spaces) 
(.*)  # Match anything that follows 
+1

¡Perfecto! Gracias también por la respuesta muy rápida. Como el texto también tiene líneas nuevas y porque hay un número al final que debería omitirse, esto es lo que funciona:^(. *?) - ([\ \ D \ W \ S \ n] *) \ d {10 } – Gijs

+1

Genial, me alegro de escucharlo. Pero será mejor que use '[\ S \ s] *' en lugar de '[\ D \ W \ S \ n] *'. –

Cuestiones relacionadas