我正在尝试从每行中收集与文件中某个模式匹配的数字数组。每行只有1个数字但并非所有行都有数字(我想拒绝这些行)。我能够使用两个数组操作来做到这一点,但我想知道是否有更干净的方法。
lines = []
File.open(myfile, "r") do |file|
lines = file.readlines.select{|line| line =~ /^ *'(p_)*\d+'/}
end
nums = lines.collect{|line| line.chomp.sub(/^ *\'(p_)*(\d+)\'.*/, '\2').to_i}
我已经尝试了nums = file.readlines.collect{|line| line.chomp.sub(/^ *\'(p_)*(\d+)\'.*/, '\2').to_i}
但是在我的数组中为任何与模式不匹配的行插入零。是否可以进行搜索和替换,只返回与搜索匹配的行?
答案 0 :(得分:0)
nums = File.open(myfile, 'r').read.split("\n")
.map { |line| line.chomp.sub(/^ *\'(p_)*(\d+)\'.*/, '\2').to_i }
.reject(&:zero?)