Ruby文字列内から文字列「\ n」を削除するにはどうすればよいですか?


115

私はこの文字列を持っています:

"some text\nandsomemore"

「\ n」を削除する必要があります。私はもう試した

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

しかし、それは機能しません。どうすればいいのですか?読んでくれてありがとう。

回答:


172

あなたのgsubでは"\n"ないを使用する必要があり'\n'ます。引用符の動作はそれぞれ異なります。

二重引用符は"、文字の拡張と式の補間を許可します。エスケープされた制御文字を使用して\n、その真の値(この場合は改行)を表し、#{expression}変数を使用してテキストに好きなルビ式を組み込めるようにします。

一方、一重引用符'は文字列を文字どおりに扱うため、展開、置換、補間などはありません。

この特定のケースでは、.deleteまたは.trメソッドのいずれかを使用して、改行を削除することをお勧めします。

詳細はこちらをご覧ください


17
適切な構文は、実際には.gsub(/ \ n /、 "")です
boulder_ruby

2
@Davidは正しいです。しかし、現時点でベンに利益をもたらすので、引用符が違いをもたらすことを示すことが重要だと感じました。ちなみに、David、それはおそらく「正しい」というよりはスタイルの問題だ。個人的にtrは、このタスクにはより良い選択だと思いますが、私が言ったように、私が答えたとき、一重引用符と二重引用符の違いを指摘するほうが良いと思いました。
オコド

60

文字列を置き換えるのではなく削除する場合は、次のように使用できますString#delete(または同等のミューテーターString#delete!)。

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

x 現在は「foofoo」に等しい

この特定のケースでString#deletegsub、実際に文字列を何かに置き換えていないので、より読みやすくなっています。


3
Ruby 1.9.3では、deleteここに示すように破壊的ではありません。新しい文字列を返します。
ブレントディリンガム2013

よく見つかりました。ミューテーターバージョンのString#deleteを使用するようにそのコードスニペットを更新しました。String#deleteではなく
Paul Leader

56

文字列の先頭と末尾の空白をすべて削除したい場合、または気にしない場合は、このstripメソッドを使用できます。

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

ここで述べたよう

編集この質問の元のタイトルは異なりました。私の答えは元の質問に対するものです。


2
これは質問の答えにはなりません。strip先頭と末尾の空白のみを削除します:ruby-doc.org/core-1.9.3/String.html#method-i-strip-21
thelostspore

1
@mvdanjはい、この特定の質問の詳細を考えると、それは答えませんが、タイトルだけに基づいて質問に答えます。私はそれが人々がそれを有用だと思った理由だと思います。
ThomasW 2015

最初に答えた時からタイトルが変わった。
ThomasW 2015年

29

これには正規表現は必要ありません。trを使用:

"some text\nandsomemore".tr("\n","")

trとreplaceの違いは何ですか?
Arnold Roa

replace変数の割り当てのように、文字列を新しい文字列に変更するだけです。一方tr、文字ごとのグローバルな検索と置換です。
マークトーマス

19

Rubyの使用chompまたはstrip関数:

"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"

2
これは質問の答えにはなりません。strip先頭と末尾の空白のみを削除-ruby-doc.org/core-1.9.3/String.html#method-i-strip-21
thelostspore

2
chompが最善の方法です...これがそれほど投票数が少ないとは信じられません
user1735921

chompメソッドでは、\ nと\ rが存在する場合、それらは中間ではなくstrの末尾から削除されます。したがって、これはOPの質問を解決しません
silva96 '26 / 04/17

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.