Rimuovi più spazi e nuove righe all'interno di String


104

Supponiamo di avere una stringa come questa:

Hello, my\n       name is Michael.

Come posso rimuovere quella nuova riga e rimuovere quegli spazi dopo quello in uno all'interno della stringa per ottenerlo?

Hello, my name is Michael.

Risposte:


188

controlla il squishmetodo Rails :

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


6
La soluzione più semplice ed elegante. Grazie. Ma c'è una cosa, questo metodo è definito in Rails, quindi funzionerà solo nelle applicazioni Rails, fortunatamente questo è il mio caso.
Kreeki

4
Come ha detto Kreeki un po 'in modo poco chiaro, questo è un metodo Rails, non un metodo Ruby.

17
Per un contesto non Rails, usa some_string.strip.gsub(/\s+/, " ")esattamente ciò che fa squish.
rapcal

1
Grazie! Non sapevosquish
Francois

38

Per illustrare Rubys costruito in squeeze :

string.gsub("\n", ' ').squeeze(' ')

3
Basta essere consapevoli: squeeze comprimerà TUTTE le stringhe che arrivano in sequenze di più caratteri. Quindi "Squeeze my application's copy" .squeeze => "Squeze my application's copy"
charliepark

8
Ma squeeze(' ')stringe solo gli spazi. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy".
Steenslag,

22

Il modo più semplice sarebbe probabilmente

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

8

Prova questo:

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

Questa è in realtà la migliore risposta "plain ruby" e funziona correttamente per rimuovere gli spazi iniziali da una stringa multilinea.
Koen.

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

vorrebbe anche rimuovere l' \nideale (credo) dovrebbe essere sostituito con uno spazio in caso di qualcosa come"Hello,\nMy name is Michael"
Ali

4

questa regex sostituirà l'istanza di 1 o più spazi bianchi con 1 spazio bianco, ps \ssostituirà tutti i caratteri dello spazio bianco che include \s\t\r\n\f:

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

Allo stesso modo per il solo ritorno a capo

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

Prima sostituisci tutto \ncon uno spazio bianco, quindi usa la regex rimuovi più spazi bianchi.


Grazie! Questo ha funzionato per i miei scopi per rimuovere gli spazi multipli ma mantenere uno spazio singolo tra le parole.
acoustic_north

3

Usa la stringa # gsub :

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

l'output non sarebbe corretto nel caso di "Hello,\nMy name is Michael". Idealmente vorresti uno spazio dove ci sia un\n
Ali

1
Use squish
currency = " XCD"
str = currency.squish
 str = "XCD" #=> "XCD"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.