目前我正在研究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行包含“描述”,我需要抓住第一行并继续下一个对象。我怎样才能做到这一点?
答案 0 :(得分:0)
然后使用#grep
和String#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
,在这种情况下你不需要做任何事情,我认为:)