入力を任意の種類の空白で分割し、結果からすべての空白を削除するRuby関数を作成するにはどうすればよいですか?たとえば、入力が
aa bbb
cc dd ee
次に、配列["aa", "bbb", "cc", "dd", "ee"]
を返します。
以下は、あなたが与えた例に対して機能するはずです:
_str.gsub(/\s+/m, ' ').strip.split(" ")
_
それは返します:
_["aa", "bbb", "cc", "dd", "ee"]
_
コードの意味:
_/\s+/m
_はより複雑な部分です。 _\s
_は空白を意味するため、_\s+
_は1つ以上の空白文字を意味します。 _/m
_部分では、m
は修飾子と呼ばれ、この場合はmultilineを意味し、多くの行を訪問することを意味します、デフォルトの動作である1つだけではありません。したがって、_/\s+/m
_は、1つ以上の空白のシーケンスを見つけることを意味します。
gsub
は、すべてを置き換えることを意味します。
strip
は、他の言語のtrim
と同等であり、文字列の先頭と末尾からスペースを削除します。
説明を書いていたので、文字列の末尾または先頭に行末文字が含まれる場合があります。
安全のため
コードは次のように書くことができます。
_str.gsub(/\s+/m, ' ').gsub(/^\s+|\s+$/m, '').split(" ")
_
あなたが持っている場合:
_str = "\n aa bbb\n cc dd ee\n\n"
_
その後、あなたは得るでしょう:
_["aa", "bbb", "cc", "dd", "ee"]
_
新しいコードの意味:
_^\s+
_文字列の先頭にある一連の空白文字
_\s+$
_文字列の末尾にある一連の空白文字
したがって、gsub(/^\s+|\s+$/m, '')
は、文字列の先頭と文字列の末尾にある空白のシーケンスを削除することを意味します。
これは String#split
:
input = <<-TEXT
aa bbb
cc dd ee
TEXT
input.split
結果:
["aa", "bbb", "cc", "dd", "ee"]
これは、1.8.7、1.9.3、2.0.0、および2.1.2を含む、テストしたすべてのバージョンのRubyで機能します。
input = <<X
aa bbb
cc dd ee
X
input.strip.split(/\s+/)
input.split("\s")
"\s"
の代わりに/\s/
が使用されている場合、whites-pacesは結果から削除されます。
Ruby 2.1.1のようにVidaicaの答えのわずかな修正として
input.split(" ")
スペース、タブ、または改行であるすべての空白を補正し、以下を生成します。
["aa", "bbb", "cc", "dd", "ee"]