文字列内の複数のスペースと改行を削除する


104

次のような文字列があるとします。

Hello, my\n       name is Michael.

どうすればその新しい行を削除し、その後にそれらのスペースを文字列の1つの内側に取​​り除いてこれを取得できますか?

Hello, my name is Michael.

回答:


188

Rails squishメソッドを確認してください。

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


6
最もシンプルで最もエレガントなソリューション。ありがとう。しかし、1つだけあります。このメソッドはRailsで定義されているため、Railsアプリケーションでのみ機能します。
Kreeki

4
Kreekiが少し明確に言ったように、これはRailsメソッドであり、Rubyメソッドではありません。

17
Rails以外のコンテキストの場合は、some_string.strip.gsub(/\s+/, " ")squishとまったく同じように使用します。
rapcal 2013

1
ありがとうございました!知らなかったsquish
フランソワ

38

squeezeに組み込まれたRubyを説明するには:

string.gsub("\n", ' ').squeeze(' ')

3
ただ注意してください:squeezeは、複数の文字の実行で来るすべての文字列を圧縮します。つまり、「アプリケーションのコピーをスクイーズする」.squeeze =>「アプリケーションのコピーをスクイーズする」
charliepark

8
しかし、squeeze(' ')スペースを圧迫するだけです。"Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy"
steenslag 2013

22

最も簡単な方法はおそらく

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

8

これを試して:

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

これは実際には最良の「単純ルビ」回答であり、複数行の文字列から先頭のスペースを取り除くために適切に機能します。
公園。

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

彼はまた、\n理想的な(私は感じます)を削除したいと考えています。これは、次のような場合にはスペースに置き換える必要があります"Hello,\nMy name is Michael"
Ali

4

この正規表現は、1つ以上の空白のインスタンスを1つの空白で置き換えます。psは、次\sを含むすべての空白文字を置き換えます\s\t\r\n\f

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

同様にキャリッジリターンのみ

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

最初にすべて\nを空白で置き換え、次に複数の空白を削除する正規表現を使用します。


ありがとう!これは、複数のスペースを削除するという私の目的のために機能しましたが、単語間の単一のスペースを維持しました。
acoustic_north

3

String#gsubを使用:

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

の場合、出力は正しくありません"Hello,\nMy name is Michael"。理想的には、そこにあるスペースたい\n
アリ


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