Rubyの文字列からすべての改行とスペースを削除するにはどうすればよいですか?
たとえば、文字列がある場合:
"123\n12312313\n\n123 1231 1231 1"
これになるはずです:
"12312312313123123112311"
つまり、すべての空白を削除する必要があります。
あなたは次のようなものを使うことができます:
_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
_ を参照してください。
String#delete を使用することもできます:
str = "123\n12312313\n\n123 1231 1231 1"
str.delete "\s\n"
#=> "12312312313123123112311"
String#delete! を使用してstr
を適切に変更できますが、delete!
は、変更が行われない場合はnil
を返します
または、数字の文字列をscan
/\d+/
およびjoin
結果:
string = "123\n\n12312313\n\n123 1231 1231 1\n"
string.scan(/\d+/).join
#=> "12312312313123123112311"
これにより、アルファベット文字、ダッシュ、記号、基本的に数字以外のすべても削除されることに注意してください。