ruby搜索并替换为readlines

时间:2014-01-13 23:13:48

标签: ruby regex

我正在尝试从每行中收集与文件中某个模式匹配的数字数组。每行只有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}但是在我的数组中为任何与模式不匹配的行插入零。是否可以进行搜索和替换,只返回与搜索匹配的行?

1 个答案:

答案 0 :(得分:0)

nums = File.open(myfile, 'r').read.split("\n")
  .map { |line| line.chomp.sub(/^ *\'(p_)*(\d+)\'.*/, '\2').to_i }
  .reject(&:zero?)