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.

Respuestas:


188

echa un vistazo al squishmétodo Rails :

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


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(' ')

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."

8

Prueba esto:

s = "Hello, my\n       name is Michael."
s.gsub(/\n\s+/, " ")

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+/, " " )

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.


¡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+/, " ")

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"

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.