我尝试读取/解析文件并从包含特定关键字的行开始并从另一个关键字的一行开始提取行。具体来说,该文件是一个视频游戏战斗日志,其中包含多个战斗的信息。我试图从每场战斗开始时获取所有信息(由包含" 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"?
答案 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!----- "
]