从Ruby中的文件中提取特定行之间的文本

时间:2014-03-13 16:07:54

标签: ruby

我尝试读取/解析文件并从包含特定关键字的行开始并从另一个关键字的一行开始提取行。具体来说,该文件是一个视频游戏战斗日志,其中包含多个战斗的信息。我试图从每场战斗开始时获取所有信息(由包含" EnterCombat"的行表示)到每场战斗结束时(由包含" ExitCombat&#的行表示) 34)

------ random line ----------
------ random line ----------
!------ EnterCombat ---------!
!----- Combat Info ----------!
!----- Combat Info ----------!
!----- ExitCombat -----------!
------ random line ----------
!------ EnterCombat ---------!
!----- Combat Info ----------!
!----- ExitCombat -----------!

我无法弄清楚如何获取每次单独战斗的信息。到目前为止,我提出了:

def fight
  File.open("combat_log.txt", "r") do |f|
    fight_info = f.read
    m = fight_info.match(/EnterCombat(.*)ExitCombat/m)
  end
end

它会获取包含"输入"的第一行之间的所有信息。以及包含"退出"的最后一行,但是如何在每次出现的" EnterCombat"之间获取信息?和" ExitCombat"?

2 个答案:

答案 0 :(得分:1)

更好地使用+代替*,并通过添加?使其非贪婪:

m = fight_info.match(/EnterCombat(.+?)ExitCombat/m)

答案 1 :(得分:0)

此:

def fight
  File.read("combat_log.txt") do |s|
    m = s.split(/EnterCombat|ExitCombat/).select.with_index{|_, i| i.odd?}
  end
end

会给:

[
  " ---------!\n!----- Combat Info ----------!\n!----- Combat Info ----------!\n!----- ",
  " ---------!\n!----- Combat Info ----------!\n!----- "
]