Entfernen Sie alle Leerzeichen aus einer Zeichenkette in Ruby
Wie kann ich entfernen Sie alle Zeilenumbrüche und Leerzeichen aus einem string in Ruby?
Zum Beispiel, wenn wir haben einen string:
"123\n12312313\n\n123 1231 1231 1"
Sollte es dies:
"12312312313123123112311"
Ist, werden alle Leerzeichen entfernt werden sollen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie so etwas wie:
Oder, wenn Sie wollen, um zurückzukehren die geänderte Zeichenfolge, anstatt ändern Sie die variable,
Diese wird auch lassen Sie die Kette mit anderen Methoden (z.B.
something_else = var_name.gsub(...).to_i
strip whitespace, dann konvertiert es in eine Ganzzahl).gsub!
Bearbeiten Sie es an Ort und Stelle, so dass Sie würde haben schreibenvar_name.gsub!(...); something_else = var_name.to_i
. Streng genommen, solange es mindestens eine änderung vorgenommen,gsub!
wird die Rückkehr der neuen version (also die gleichegsub
zurückkehren würde), aber die chance, dass Sie immer eine Zeichenfolge ohne Leerzeichen, es werdenil
und Dinge zu brechen. Weil das so ist, würde ich es vorziehengsub
wenn Sie chaining Methoden.gsub
funktioniert durch den Austausch alle Spiele der ersten Auseinandersetzung mit dem Inhalt der zweiten argument. In diesem Fall entspricht jede Sequenz von aufeinanderfolgenden whitespace-Zeichen (oder nur einen einzigen) mit der regex/\s+/
, dann ersetzt diese mit einem leeren string. Es gibt auch einen block bilden, wenn Sie wollen, zu tun, einige Bearbeitung auf den übereinstimmenden Teil, anstatt nur den Austausch direkt; siehe(String#gsub
für weitere Informationen darüber.Den Ruby-docs für die Klasse
Regexp
sind ein guter Ausgangspunkt, um mehr zu erfahren über reguläre Ausdrücke-ich habe festgestellt, dass Sie sind nützlich in einer Vielzahl von Situationen, in denen ein paar Millisekunden hier oder dort nicht zählen und Sie brauchen nicht zu entsprechen, Dinge, die geschachtelt werden können willkürlich tief.Als Gen schlug in seinem Kommentar, Sie können auch
tr
:Es funktioniert in ähnlicher Weise, aber anstatt Sie zu ersetzen eine regex, es ersetzt jede Instanz des nTEN Zeichen des ersten Arguments in der Zeichenkette genannt wird es mit der nTEN Zeichen des zweiten Parameters, oder wenn es nicht ist, mit nichts. Sehen
(String#tr
für weitere Informationen.string.glub(/ /, '')
oderstring.glub(' ', '')
funktioniert auch.gsub
? Ich kenne keine Methode mit dem Namenglub
. Wenn du das getan hast, obwohl -, Das funktioniert, aber nur wenn Sie nur versuchen, um Speicherplatz zu entfernen von Zeichen (z.B. U+0020). Wenn Sie versuchen zu entfernen, alle Leerzeichen, müssen Sie Sie in.string.gsub(/ /, '')
oderstring.gsub(' ', '')
ja, und ich Stimme mit Ihnen überein, Nic.Könnten Sie auch String#löschen:
Könnten Sie String#löschen!!! zu ändern
str
im Ort, aber beachten Siedelete!
zurücknil
wenn keine änderung vorgenommen wirdsrr.tr "\s\n", ""
.)Alternativ könnte man
scan
den string für die Ziffern/\d+/
undjoin
das Ergebnis:Bitte beachten Sie, dass dies auch entfernen, alphabetische Zeichen, Striche, Symbole, im Grunde alles, was keine Ziffer ist.