2011-01-31 60 views
6

Tengo una serie de párrafos que quiero analizar con expresiones regulares, pero desafortunadamente, el párrafo aparece con muchos espacios en blanco entre oraciones y, a veces, palabras. Me gustaría poder eliminar todo el exceso de espacio en blanco, pero no estoy seguro de cómo ... ¿Alguien tiene alguna idea? No quiero eliminar todos los espacios en blanco, que es lo único que he encontrado hasta ahora, pero mantener el formato de párrafo regular, como después de cada palabra tener un espacio en blanco, y después de cada puntuación + palabra tener un espacio en blanco. Estoy codificando en Perl.Cómo eliminar el exceso de espacios en blanco en cadena utilizando Regex

¡Cualquier ayuda sería apreciada!

Respuesta

14

canonicalize blanco horizontales:

s/\h+/ /g; 

canonicalize espacios en blanco verticales:

s/\v+/\n/g; 

canonicalize todos los espacios en blanco:

s/[\h\v]+/ /g; 
+0

¡Gracias! ¡El último es perfecto! (Lo sé, todavía no debería usar regex: P) – Sheldon

4

Puede utilizar el sencillo en Perl expresiones regulares

s/\s+/ /g; 

su información, este tipo de cosas se hace mejor con la herramienta UNIX tr

tr -s ' ' 

Will apretón espacios a un solo espacio.

+2

Perl tiene tr /// también: tr/\ n \ r \ f \ t// s – tadmc

+0

Buen punto, gracias por la adición. – ocodo

1

Tanto las respuestas anteriores están dando el resultado, pero en ambos casos , hay un espacio al principio y al final de la cadena.

Si utilizo estas expresiones regulares en la cadena de "hola mundo", estoy recibiendo la respuesta como "hola mundo"

Para obtener el resultado como "hola mundo", la siguiente expresión regular Perl funcionará bien

$a =~ s/(?<!\w) //g; 

Usando la mira atrás, se eliminan todos los espacios extra.

Cuestiones relacionadas