web-dev-qa-db-ja.com

Rubyの文字列からすべての空白を削除する

Rubyの文字列からすべての改行とスペースを削除するにはどうすればよいですか?

たとえば、文字列がある場合:

"123\n12312313\n\n123 1231 1231 1"

これになるはずです:

"12312312313123123112311"

つまり、すべての空白を削除する必要があります。

14
Ayush Mishra

あなたは次のようなものを使うことができます:

_var_name.gsub!(/\s+/, '')
_

または、変数を変更する代わりに、変更された文字列を返したい場合は、

_var_name.gsub(/\s+/, '')
_

これにより、他のメソッドとチェーンすることもできます(つまり、something_else = var_name.gsub(...).to_iで空白を取り除き、整数に変換します)。 _gsub!_はその場で編集するため、var_name.gsub!(...); something_else = var_name.to_iと記述する必要があります。厳密に言えば、少なくとも1つの変更が行われている限り、_gsub!_は新しいバージョンを返します(つまり、gsubが返すものと同じです)が、文字列を取得している可能性があります。空白がないと、nilが返され、問題が発生します。そのため、メソッドをチェーンする場合はgsubをお勧めします。

gsubは、最初の引数の一致を2番目の引数の内容で置き換えることによって機能します。この場合、連続する空白文字のシーケンス(または1つだけ)を正規表現_/\s+/_と照合し、空の文字列に置き換えます。直接置換するだけでなく、一致した部分を処理したい場合は、ブロックフォームもあります。詳細は _String#gsub_ を参照してください。

Rubyクラスのドキュメント Regexp は、正規表現の詳細を学ぶための良い出発点です-それらが有用であることがわかりましたここまたは数ミリ秒がカウントされず、任意に深くネストできるものと一致させる必要がない、さまざまな状況で。

Gene がコメントで示唆しているように、trを使用することもできます。

_var_name.tr(" \t\r\n", '')
_

同様に機能しますが、正規表現を置き換える代わりに、呼び出された文字列の最初の引数のn番目の文字のすべてのインスタンスを置き換えます2番目のパラメーターのn番目の文字でオンにするか、ない場合は何も付けません。詳細は _String#tr_ を参照してください。

37

String#delete を使用することもできます:

str = "123\n12312313\n\n123 1231 1231 1"

str.delete "\s\n"
  #=> "12312312313123123112311"

String#delete! を使用してstrを適切に変更できますが、delete!は、変更が行われない場合はnilを返します

6
Cary Swoveland

または、数字の文字列をscan/\d+/およびjoin結果:

string = "123\n\n12312313\n\n123 1231 1231 1\n"

string.scan(/\d+/).join
#=> "12312312313123123112311"

これにより、アルファベット文字、ダッシュ、記号、基本的に数字以外のすべても削除されることに注意してください。

1
spickermann