2017-02-06 10 views
0

私は、配列内のアイテムを交換したい:それは正規表現に一致するかどうかに基づいて、潜在的に複数のアイテムを配列内の1つの要素を複数の要素に置き換えるにはどうすればよいですか?

arr = ["55", "4.ARTHUR", "masddf"] 

。私は結果を持っているしたいと思います:

["55", "4.", "ARTHUR", "masddf"] 

は、私が試した:

arr.map { |o| o =~ /\d+\./ ? o.split(/^(\d+\.)/).reject { |c| c.empty? } : o } 
# => ["55", ["4.", "ARTHUR"], "masddf"] 

arr.map { |o| o =~ /\d+\./ ? o.split(/^(\d+\.)/).reject { |c| c.empty? }.flatten : o } 
# => ["55", ["4.", "ARTHUR"], "masddf"] 

私は、彼らがに分かれてしまった配列の外側の要素を取得するように見えることはできません。 アイデア代わりに

答えて

3

使用flat_map

arr = ["55", "4.ARTHUR", "masddf"] 
arr.flat_map { |o| o =~ /\d+\./ ? o.split(/^(\d+\.)/).reject { |c| c.empty? } : o } 
# => ["55", "4.", "ARTHUR", "masddf"] 

がrepl.itでそれを参照してください:ところでhttps://repl.it/F90V

は、この問題を解決するための簡単な方法は、使用することですString#scan

arr.flat_map {|o| o.scan(/^\d+\.|.+/) } 

repl.itで見る:https://repl.it/F90V/1

関連する問題