Entfernen Sie mehrere Leerzeichen und neue Zeilen innerhalb von String

104

Angenommen, wir haben eine Zeichenfolge wie diese:

Hello, my\n       name is Michael.

Wie kann ich diese neue Zeile entfernen und diese Leerzeichen danach in eine innerhalb der Zeichenfolge entfernen, um dies zu erhalten?

Hello, my name is Michael.
Kreeki
quelle

Antworten:

188

Check-out Rails- squishMethode:

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

socjopata
quelle
6
Die einfachste und eleganteste Lösung. Vielen Dank. Aber eines ist: Diese Methode ist in Rails definiert, sodass sie nur in Rails-Anwendungen funktioniert. Zum Glück ist das mein Fall.
Kreeki
4
Wie Kreeki ein bisschen unklar sagte, ist dies eine Rails-Methode, keine Ruby-Methode.
17
Verwenden Sie für einen Nicht-Rails-Kontext some_string.strip.gsub(/\s+/, " ")genau das, was Squish bewirkt.
Rapcal
1
Danke dir! Wusste nichts übersquish
Francois
38

Um Rubys eingebauten Squeeze zu veranschaulichen :

string.gsub("\n", ' ').squeeze(' ')
steenslag
quelle
3
Beachten Sie jedoch, dass Squeeze ALLE Zeichenfolgen komprimiert, die in mehreren Zeichenfolgen ausgeführt werden. Also "Drücken Sie die Kopie meiner Anwendung" .squeeze => "Squeze die Kopie meiner Anwendung"
Charliepark
8
Aber squeeze(' ')drückt nur Leerzeichen. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy".
Steenslag
22

Der einfachste Weg wäre wahrscheinlich

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

Versuche dies:

s = "Hello, my\n       name is Michael."
s.gsub(/\n\s+/, " ")
Anusha
quelle
Dies ist tatsächlich die beste "einfache Rubin" -Antwort und funktioniert ordnungsgemäß, um führende Leerzeichen von einer mehrzeiligen Zeichenfolge zu entfernen.
Koen.
5
my_string = "Hello, my\n       name is Michael."
my_string = my_string.gsub( /\s+/, " " )
fl00r
quelle
er möchte auch das \nIdeal entfernen (ich denke), es sollte durch ein Leerzeichen ersetzt werden, falls so etwas wie"Hello,\nMy name is Michael"
Ali
4

Diese Regex ersetzt die Instanz von 1 oder mehr Leerzeichen durch 1 Leerzeichen. Ps \sersetzt alle Leerzeichen, einschließlich \s\t\r\n\f:

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

Ähnliches gilt nur für Wagenrücklauf

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

Ersetzen Sie zuerst alle \ndurch Leerzeichen und verwenden Sie dann den Regex zum Entfernen mehrerer Leerzeichen.

Ali
quelle
Vielen Dank! Dies funktionierte für meine Zwecke, um mehrere Leerzeichen zu entfernen, aber ein einzelnes Leerzeichen zwischen Wörtern beizubehalten.
Acoustic_North
3

Verwenden Sie String # gsub :

s = "Hello, my\n       name is Michael."
s.gsub(/\s+/, " ")
Nikola
quelle
Ausgabe wäre im Fall von nicht korrekt "Hello,\nMy name is Michael". Idealerweise möchten Sie einen Raum, in dem es einen\n
Ali
1
Use squish
currency = " XCD"
str = currency.squish
 str = "XCD" #=> "XCD"
vikas pal
quelle