web-dev-qa-db-ja.com

Ruby空白で分割

入力を任意の種類の空白で分割し、結果からすべての空白を削除するRuby関数を作成するにはどうすればよいですか?たとえば、入力が

 aa bbb
cc    dd ee

次に、配列["aa", "bbb", "cc", "dd", "ee"]を返します。

39
JJ Beck

以下は、あなたが与えた例に対して機能するはずです:

_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, '')は、文字列の先頭と文字列の末尾にある空白のシーケンスを削除することを意味します。

43
Candide

これは 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で機能します。

48
Ajedi32
input = <<X
     aa bbb
cc    dd ee
X

input.strip.split(/\s+/)
21
sawa
input.split("\s")

"\s"の代わりに/\s/が使用されている場合、whites-pacesは結果から削除されます。

6
vidang

Ruby 2.1.1のようにVidaicaの答えのわずかな修正として

input.split(" ")

スペース、タブ、または改行であるすべての空白を補正し、以下を生成します。

["aa", "bbb", "cc", "dd", "ee"]
5
J3RN