2016-05-04 30 views
0

Unix grep有一个简单的-o, --only-matching选项,用于只显示匹配PATTERN的匹配行的一部分。如何在Ruby中仅显示匹配部分(模仿“-o,--only-matching”grep选项)?

在Ruby中使用grep方法或任何其他标准方法(无需exec或gems)模仿该行为最简单的方法是什么?

实施例给出:

File.open('test.css','r') do |file| 
    file.each_line do |line| 
    match=/p[A-Z]+/.match(line) 
    puts match.to_s unless match.nil? 
    end 
end 

将模仿grep -oE "p[A-Z]+" test.css。 我想有更好的(更清洁和更简洁)的方法。

+1

使用'str.scan' ..,'str.scan(/ P [A-Z] + /)' –

回答

1

趁着@阿维纳什 - 拉吉,我结束了与此:

puts File.open('test.css','r'){|f| f.read.scan(/p[A-Z]+/)} 

这似乎是一个很好的协议,不占用过多的存储空间的文件。

依然对其他解决方案开放。

0

使用String#scan获得所有比赛的数组:

File.foreach('test.css') do |line| 
    line.scan(/p[A-Z]+/).each do |match| 
    puts match 
    end 
end