我想替换数组中的项目:
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"]
我似乎无法将它们分成的数组外部的元素。 有什么想法吗?
答案 0 :(得分: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