Elimina varios espacios y nuevas líneas dentro de String

104

Supongamos que tenemos una cadena como esta:

Hello, my\n       name is Michael.

¿Cómo puedo eliminar esa nueva línea y quitar esos espacios después de eso en uno dentro de la cadena para obtener esto?

Hello, my name is Michael.
Kreeki
fuente

Respuestas:

188

echa un vistazo al squishmétodo Rails :

http://apidock.com/rails/String/squish

socjopata
fuente
6
La solución más sencilla y elegante. Gracias. Pero hay una cosa, este método está definido en Rails, por lo que solo funcionará en aplicaciones Rails, afortunadamente ese es mi caso.
Kreeki
4
Como Kreeki dijo un poco confuso, este es un método Rails, no un método Ruby.
17
Para un contexto que no sea de Rails, use some_string.strip.gsub(/\s+/, " ")que es exactamente lo que hace Squish.
rapcal
1
¡Gracias! No sabía sobresquish
Francois
38

Para ilustrar Rubys integrado en el apretón :

string.gsub("\n", ' ').squeeze(' ')
Steenslag
fuente
3
Solo tenga en cuenta: squeeze comprimirá TODAS las cadenas que vienen en series de varios caracteres. Entonces "Apriete la copia de mi aplicación" .squeeze => "Apriete la copia de mi aplicación"
charliepark
8
Pero squeeze(' ')solo aprieta espacios. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy".
steenslag
22

La forma más sencilla probablemente sería

s = "Hello, my\n       name is Michael."
s.split.join(' ') #=> "Hello, my name is Michael."
Koraktor
fuente
8

Prueba esto:

s = "Hello, my\n       name is Michael."
s.gsub(/\n\s+/, " ")
anusha
fuente
En realidad, esta es la mejor respuesta "simple ruby" y funciona correctamente para eliminar los espacios iniciales de una cadena de varias líneas.
Koen.
5
my_string = "Hello, my\n       name is Michael."
my_string = my_string.gsub( /\s+/, " " )
fl00r
fuente
también le gustaría eliminar lo \nideal (creo) que debería reemplazarse con un espacio en caso de algo como"Hello,\nMy name is Michael"
Ali
4

esta expresión regular reemplazará la instancia de 1 o más espacios en blanco con 1 espacio en blanco, ps \sreemplazará todos los caracteres de espacio en blanco que incluyen \s\t\r\n\f:

a_string.gsub!(/\s+/, ' ')

Del mismo modo para solo retorno de carro

str.gsub!(/\n/, " ")

Primero reemplace todo \ncon espacios en blanco, luego use la expresión regular eliminar múltiples espacios en blanco.

Ali
fuente
¡Gracias! Esto funcionó para mis propósitos para eliminar múltiples espacios pero mantener un solo espacio entre palabras.
acoustic_north
3

Utilice String # gsub :

s = "Hello, my\n       name is Michael."
s.gsub(/\s+/, " ")
Nikola
fuente
la salida no sería correcta en el caso de "Hello,\nMy name is Michael". Idealmente, querría un espacio donde haya un\n
Ali
1
Use squish
currency = " XCD"
str = currency.squish
 str = "XCD" #=> "XCD"
vikas pal
fuente