如果我有以下数组...
["a =>", "b => c", "c => f", "d => a", "e => b", "f =>"]
我怎么能让它回来......
["a", "b", "c", "c", "f", "d", "a", "e", "b", "f"]
我想与.map
&使用.tr
或.gsub
,但我永远无法理解......
答案 0 :(得分:4)
假设您只想要字符串的字母:
arr = ["a =>", "b => c", "c => f", "d => a", "e => b", "f =>"]
arr.flat_map { |str| str.scan(/\w+/) }
=> ["a", "b", "c", "c", "f", "d", "a", "e", "b", "f"]
正则表达式\w
表示只匹配字母,数字或下划线。
答案 1 :(得分:2)
这应该可以解决问题:
arr = ["a =>", "b => c", "c => f", "d => a", "e => b", "f =>"]
arr.join(' ').scan(/\w/)
OR
arr.join(' ').scan(/\w+/)
=> ["a", "b", "c", "c", "f", "d", "a", "e", "b", "f"]
有一个很好的网站名为Rubular(http://rubular.com/),您可以在其中以交互方式测试各种正则表达式与字符串。它还列出了" Regex快速参考"所以你可以了解你经常在Ruby代码中看到的正则表达式。
答案 2 :(得分:1)
["a =>", "b => c", "c => f", "d => a", "e => b", "f =>"].join.gsub(/=>| /, '').chars
# => ["a", "b", "c", "c", "f", "d", "a", "e", "b", "f"]
["a =>", "b => c", "c => f", "d => a", "e => b", "f =>"].join.gsub(/[^a-z]/, '').chars
# => ["a", "b", "c", "c", "f", "d", "a", "e", "b", "f"]
所以我将字符串连接在一起(Array#join),用空字符串(String#gsub)替换不需要的字符,并将结果字符串拆分为字符(String#chars)
答案 3 :(得分:0)
根据数组的可能形式和所需的返回值,这两个问题都不清楚,您可以执行以下操作。
arr = ["a_1 =>", "b 2 => cc3", "cc3 => f6", "d4 => a_1", "e5 => b 2", "f6 =>"]
arr.flat_map { |str| str.split /\s*=>\s*/ }
#=> ["a_1", "b 2", "cc3", "cc3", "f6", "d4", "a_1", "e5", "b 2", "f6"]
迄今为止给出的其他答案都没有为此数组返回相同的值。