2012-06-25 18 views
10

Estoy tratando de determinar la sintaxis de RegEx correcta para realizar lo siguiente. Tengo línea en un archivo en el que quiero unir cada carácter antes de la primera aparición de espacio en blanco.RegEx - codicioso espacio en blanco coincide

así por ejemplo en la línea:

123abc foo bar XYZ

no está claro para mí por qué el siguiente:

^.*\s 

está haciendo juego hasta la b en la barra de palabras:

123abc foo xyz

Me parece que la \ s es codicioso, sin embargo no estoy seguro de cómo puedo hacer que no codicioso y simplemente igualar 123abc he intentado varias formas de esta expresión regular en un intento de hacer no es codicioso ^.*\s? o algo así, sin embargo no he tenido éxito. Gracias de antemano

+1

probar este -.? '^ * \ S'. en su versión el punto es codicioso –

+0

Esto es exactamente lo que quería - gracias a los dos - Lo que pensé que estaba haciendo era poner el punto codicioso con el * hasta que encuentre un espacio en blanco (con el \ s) y luego colocaría el ? después de la \ s para indicar que solo coinciden 0 o más veces.Entiendo ahora - gracias – vloche

Respuesta

16

Esto es porque . puede tener cualquier carácter, incluido el espacio. Usted puede tratar de

^[^ ]*\s 

o

^\S*\s 

lugar.

Eso es codicioso. Pero se puede hacer también re no expansivo:

^.*?\s 

Usted error es que usted ha colocado ? en un lugar equivocado.

Ejemplos:

$ echo aaaa bbb cccc dddd > re.txt 
$ cat re.txt 
aaaa bbb cccc dddd 
$ egrep -o '^.*\s' re.txt 
aaaa bbb cccc 
$ egrep -o '^\S*\s' re.txt 
aaaa 
$ egrep -o '^[^ ]*\s' re.txt 
aaaa 

Y no expansivo de búsqueda con el Perl:

$ perl -ne 'print "$1\n" if /^(.*?)\s/' re.txt 
aaaa 
+0

Debe tenerse en cuenta que cada coincidencia incluirá exactamente un carácter de espacio en blanco al final –

+0

Gracias Igor - respondió mi primera pregunta y otra diferente sobre RegEx - gracias – vloche

+0

@vloche Considere marcar esta respuesta como aceptada – ellockie

3

Uso de expresiones regulares ^\S*(?=\s)

¿Qué significa todo (*) caracteres que no sean en blanco (\S) desde un principio (^), pero debe seguir el carácter de espacio en blanco (\s), Pero no está incluido en el partido - búsqueda positiva hacia delante (?=\s)

Si desea espacios en blanco (s) para ser incluido también, a continuación, utilizar expresiones regulares ^\S*\s+

Cuestiones relacionadas