2014-01-13 110 views
0

我想從每行中匹配一個文件中的某種模式的數組數組。每行只有1個數字,但並非所有行都有數字(我想拒絕這些行)。我能夠做到這一點使用兩個數組操作,但我想知道是否有一個更清潔的方法。紅寶石搜索和替換readlines

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?) 
+0

這適用於我的具體情況,但如果我想要抓住的一些數字是零呢? –

+0

GregRuhl,如果零是一個有效的結果,那麼你可以在'map'語句之前用'select'模式匹配器替換'reject'。 – Mori