耙my_string.include?限制到第一个结果

时间:2014-06-03 20:32:25

标签: ruby-on-rails ruby loops rake

目前我正在研究Rake任务,它提取文本并返回结果。 在示例中,我的对象Car具有属性body,包含多行文本,我需要抓取包含单词Description(不区分大小写)的行。我通过运行来实现这一目标:

cars.each do |car|
    car.body.each_line do |line|
        if line.downcase.include? "description"
            # Rest of the code goes here
        end
    end
end

像魅力一样工作,但问题是,正文中可能有10行包含“描述”,我需要抓住第一行并继续下一个对象。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:0)

然后使用#grepString#lines

cars.each do |car|
    car.body.lines.grep(/description/) do
       # do your work
       break
    end
end

模拟此示例: -

2.times {  ['aaa','bbbbaa'].grep(/aa/) { |m| p m.size; break } }
# >> 3
# >> 3

答案 1 :(得分:0)

cars.each do |car|
  match = car.body.lines.select{|line| 
    line.scan(/description/i).any? 
  }.first or next
  # Do something with 'match' or you might not be here
end

答案 2 :(得分:0)

我会做类似的事情:

cars.each do |car|
  description = car.body.lines.grep(/description/).first
  if description
    # ... do your stuff with the first found description ...
  end
end

因此,简而言之:搜索包含“description”的所有行并从该结果中获取第一行。如果没有这样的行,这将返回nil,在这种情况下你不需要做任何事情,我认为:)