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.

Antworten:


188

Check-out Rails- squishMethode:

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


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

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

8

Versuche dies:

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

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

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.


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

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"

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.