入力を任意の種類の空白で分割し、結果からすべての空白を削除する Ruby 関数を作成するにはどうすればよいですか? たとえば、入力が
aa bbb
cc dd ee
次に、配列を返し["aa", "bbb", "cc", "dd", "ee"]
ます。
入力を任意の種類の空白で分割し、結果からすべての空白を削除する Ruby 関数を作成するにはどうすればよいですか? たとえば、入力が
aa bbb
cc dd ee
次に、配列を返し["aa", "bbb", "cc", "dd", "ee"]
ます。
これは のデフォルトの動作です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 を含む) で機能します。
あなたが与えた例では、以下がうまくいくはずです:
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, '')
ため、文字列の先頭と末尾にある一連の空白を削除することを意味します。
input = <<X
aa bbb
cc dd ee
X
input.strip.split(/\s+/)
input.split("\s")
"\s"
の代わりに を使用すると、/\s/
空白が結果から削除されます。