【问题标题】:How to show only the matching portions (mimicing the "-o, --only-matching" grep option) in Ruby?如何在 Ruby 中仅显示匹配部分(模仿“-o,--only-matching”grep 选项)?
【发布时间】:2016-05-04 10:44:01
【问题描述】:

Unix grep 有一个简单的-o, --only-matching 选项,仅显示匹配 PATTERN 的匹配行部分。

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

给出的例子:

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。 我想有更好(更简洁)的方法。

【问题讨论】:

  • 使用str.scan.., str.scan(/p[A-Z]+/)

标签: ruby regex grep


【解决方案1】:

利用@avinash-raj,我最终得到了这个:

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

对于不占用太多内存空间的文件来说似乎很划算。

仍然对其他解决方案持开放态度。

【讨论】:

  • 那么,“scan()”等价于“grep -Eo”?
【解决方案2】:

使用String#scan 获取所有匹配项的数组:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多