【发布时间】:2021-12-04 19:39:01
【问题描述】:
我有一个日志文件,每行跟踪多个游戏事件,但这也包括在“官方”游戏时间之外发生的事件(即赛前等)。我有预定义的正则表达式模式,可以读取和解析每个事件,并汇总这些统计数据,尽管这包括在正式回合之前和之后发生的多余统计数据。
我的统计数据聚合目前很好,我目前正在努力解析一系列两个事件。没有明确的“游戏开始”事件,但有一个“回合开始”事件,该事件对比赛期间开始的每个回合都计数。游戏结束更简单,因为“游戏结束”是一个被记录的事件。
如果我能够读取“回合开始”事件和“游戏结束”事件,我将如何开始在第一个实例中读取文件中的行 'round start',一旦触发游戏结束就读完台词?
eg:
line 37 | trigger "(Round_Start)" <-- begin parsing here
...
line 192 | trigger "(Round_Start)"
...
line 304 | trigger "(Round_Start)"
...
line 486 | trigger "(Round_Start)"
...
line 594 | trigger "(Game_Over)" <-- finish parsing here
查看下面的一些代码可能会有所帮助。
dmgEvent_P = re.compile(r'"([\w\s]+)<.*hurt "([\w\s]+)<.*\(dmg "(\d+)"')
hpEvent_P = re.compile(r'"([\w\s]+)<.*healed "([\w\s]+)<.*\(hp "(\d+)"')
roundStart_P = re.compile(r'trigger "(Round_Start)"')
gameOver_P = re.compile(r'trigger "(Game_Over)"')
matches = dmgEvent_P.finditer(contents)
for match in matches:
dealer = match.group(1)
receiver = match.group(2)
dmg = int(match.group(3))
modifyDMG(dealer, receiver, dmg)
matches = healthEvent_P.finditer(contents)
for match in matches:
dealer = match.group(1)
receiver = match.group(2)
hp = int(match.group(3))
modifyHP(dealer, receiver, hp)
还有其他正在跟踪的游戏内事件,但它们的功能非常相似。
就目前而言,我当前的代码目前通过完全按照每个正则表达式解析函数读取日志内容来解析所有事件,而不是逐行汇总。我希望能够在我上面定义的范围内共同解析这些行。
【问题讨论】:
-
转义正则表达式中的文字括号。
-
我使用括号来定义我从中提取数据的组。他们还必须在这种情况下逃脱吗?日志条目中没有括号。
-
如果
trigger "(Round_Start)"是您的文本,括号必须与模式中的\(和\)匹配。 -
我的短信是
trigger "Round_Start"。我相信在这种情况下我应该没问题?
标签: python python-3.x regex