Wie kann ich die Zeichenfolge "\ n" aus einer Ruby-Zeichenfolge entfernen?

115

Ich habe diese Zeichenfolge:

"some text\nandsomemore"

Ich muss das "\ n" daraus entfernen. ich habe es versucht

"some text\nandsomemore".gsub('\n','')

aber es funktioniert nicht. Wie mache ich es? Danke fürs Lesen.

ben
quelle

Antworten:

172

Sie müssen "\n"nicht '\n'in Ihrem gsub verwenden. Die verschiedenen Anführungszeichen verhalten sich unterschiedlich.

Doppelte Anführungszeichen "ermöglichen die Zeichenerweiterung und Ausdrucksinterpolation, d. H. Mit ihnen können Sie maskierte Steuerzeichen verwenden , um \nihren wahren Wert darzustellen, in diesem Fall Newline , und die Verwendung von verwenden, #{expression}damit Sie Variablen und so ziemlich jeden beliebigen Rubinausdruck in den Text einbinden können.

Auf der anderen Seite 'behandeln einfache Anführungszeichen die Zeichenfolge wörtlich, sodass es keine Erweiterung, Ersetzung, Interpolation oder was Sie haben.

In diesem speziellen Fall ist es besser, die Zeilenumbrüche entweder mit der Methode .deleteoder mit der .trMethode String zu löschen .

Weitere Informationen finden Sie hier

ocodo
quelle
17
Die richtige Syntax wäre wirklich .gsub (/ \ n /, "")
boulder_ruby
2
@ David ist richtig. Ich fand es jedoch wichtig zu zeigen, dass die Zitate einen Unterschied machen, da dies Ben an dieser Stelle zugute kommen würde. Wohlgemerkt, David, es ist wahrscheinlich eher eine Frage des Stils als "richtig". Persönlich denke ich, dass dies treine bessere Wahl für diese Aufgabe ist, aber wie gesagt, ich fand es besser, auf den Unterschied in einfachen, doppelten Anführungszeichen hinzuweisen, wenn ich antwortete.
ocodo
60

Wenn Sie eine Zeichenfolge entfernen möchten, anstatt sie zu ersetzen, können Sie Folgendes verwenden String#delete(oder das entsprechende Mutator-Äquivalent String#delete!), z.

x = "foo\nfoo"
x.delete!("\n")

x jetzt gleich "foofoo"

In diesem speziellen Fall String#deleteist es besser lesbar als gsubda Sie die Zeichenfolge nicht durch irgendetwas ersetzen.

Paul Leader
quelle
3
Zumindest in Ruby 1.9.3 deleteist es nicht destruktiv, wie hier angegeben. Es wird eine neue Zeichenfolge zurückgegeben.
Brent Dillingham
Gut erkannt. Ich habe dieses Code-Snippet aktualisiert, um die Mutator-Version String # delete zu verwenden! anstatt String # löschen
Paul Leader
56

Wenn Sie möchten oder nicht möchten, dass alle führenden und nachfolgenden Leerzeichen aus Ihrer Zeichenfolge entfernt werden, können Sie die stripMethode verwenden.

"    hello    ".strip   #=> "hello"   
"\tgoodbye\r\n".strip   #=> "goodbye"

wie hier erwähnt .

bearbeiten Der ursprüngliche Titel für diese Frage war anders. Meine Antwort ist für die ursprüngliche Frage.

ThomasW
quelle
2
Dies beantwortet die Frage nicht. Entferntstrip nur führende und nachfolgende
letzte Spore
1
@mvdanj Ja, angesichts der Details dieser speziellen Frage wird sie nicht beantwortet, aber die Frage wird nur anhand des Titels beantwortet. Ich vermute, deshalb haben die Leute es nützlich gefunden.
ThomasW
Der Titel wurde seit meiner ursprünglichen Antwort geändert.
ThomasW
29

Sie brauchen dafür keinen regulären Ausdruck. Verwenden Sie tr:

"some text\nandsomemore".tr("\n","")
Mark Thomas
quelle
Was ist der Unterschied zwischen einem Ersatz?
Arnold Roa
replaceÄndert einfach die Zeichenfolge in eine neue, z. B. die Variablenzuweisung. wohingegen tres sich um ein zeichenweises globales Suchen und Ersetzen handelt.
Mark Thomas
19

Verwendung chompoder stripFunktionen von Ruby:

"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
Mateo Vidal
quelle
2
Dies beantwortet die Frage nicht. stripentfernt nur führende und nachfolgende
letzte Spore
2
Chomp ist der beste Weg ... kann nicht glauben, dass dies so weniger positive Stimmen hat
user1735921
Bei der Chomp-Methode werden \ n und \ r vom Ende von str entfernt, wenn sie vorhanden sind, nicht in der Mitte. Das löst also nicht die OP-Frage
silva96