50

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

 aa bbb
cc    dd ee

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

4

5 に答える 5

62

これは のデフォルトの動作ですString#split:

input = <<-TEXT
 aa bbb
cc    dd ee
TEXT

input.split

結果:

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

これは、私がテストしたすべてのバージョンの Ruby (1.8.7、1.9.3、2.0.0、および 2.1.2 を含む) で機能します。

于 2014-08-01T19:38:56.577 に答える
53

あなたが与えた例では、以下がうまくいくはずです:

str.gsub(/\s+/m, ' ').strip.split(" ")

それは返します:

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

コードの意味:

/\s+/mより複雑な部分です。\sは空白を\s+意味するため、1 つ以上の空白文字を意味します。その/m部分でmは、修飾子と呼ばれます。この場合はmultilineを意味し、デフォルトの動作である 1 行だけでなく、複数の行にアクセスすることを意味します。つまり、/\s+/m1 つ以上の空白のシーケンスを見つけることを意味します。

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, '')ため、文字列の先頭と末尾にある一連の空白を削除することを意味します。

于 2012-11-24T03:28:41.500 に答える
24
input = <<X
     aa bbb
cc    dd ee
X

input.strip.split(/\s+/)
于 2012-11-24T04:07:43.533 に答える
7
input.split("\s")

"\s"の代わりに を使用すると、/\s/空白が結果から削除されます。

于 2013-05-01T12:11:46.040 に答える