c# - 如何使用正则表达式和/或 linq 解析游戏日志?

标签 c# regex linq

我正在寻找最优雅的方法来解析它。当涉及到我的正则表达式知识时,我只是碰壁了,也许正则表达式甚至不是最好的答案?

我有三个例句来举例说明我想做什么。我想将这些解析为四个部分。攻击者、攻击类型、伤害和目标。

Gandalfs's heavenly wrath DISMEMBERS you!

The Holy Prelate's slash wounds Frodo.

Your divine power decimates the evil Warlock!

攻击者: 一个或几个单词始终排在前面,这些单词可以通过“你的”或以 's 结尾来识别。

攻击类型:只能通过介于“攻击者”和“破坏者”之间的一个或几个词来识别。

损害:一个或多个(罕见但存在)独特且有限的词。我有一个可能的单词列表。 {“伤口”,“死亡人数”等}。它们不存在于其他任何地方,因此没有攻击者被命名为“伤口”或类似名称的风险。

目标:一个或几个可以被识别为都是损坏后的单词。

最佳答案

以下正则表达式将返回每行四次捕获的匹配项:

^((?<attacker>Your)|(?<attacker>.*?)'s)\s+(?<type>.*\S?)\s+(?<damage>wounds|decimates|dismembers)\s+(?<target>.*)\p{P}\s*?$

请注意,您需要使用以下正则表达式选项才能使其正常工作:

  • 忽略大小写
  • 多行
  • 显式捕获

然后您可以查询每场比赛的组值(攻击者、类型、伤害、目标)。

请注意,您需要填写损坏 list 。

我的正则表达式测试应用程序设置为处理所有匹配项,为您的测试数据和我的正则表达式返回以下内容:

Attacker: Gandalfs
Type: heavenly wrath
Damage: DISMEMBERS
Target: you

Attacker: The Holy Prelate
Type: slash
Damage: wounds
Target: Frodo

Attacker: Your
Type: divine power
Damage: decimates
Target: the evil Warlock

关于c# - 如何使用正则表达式和/或 linq 解析游戏日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4329097/

相关文章:

c# - 以非对称方式合并两个 Dictionary<string, string>

c# - 将 var 初始化为空

c# - 委托(delegate)和事件

c# - 从分层架构更新数据库 : best approach?

c# - Math.NET Numerics - 来自 double 组的 Matrix<double>

php - 从字符串中提取特殊的哈希值

c# - 为什么 "IQueryable.Where()"在此查询中提供与 "IEnumerable.Where()"不同的结果?

c# - ParseExact 无法解析 RFC 3339 Internet 日期/时间格式的字符串

python - Python 中的正则表达式和格式化

python - "ReplaceWith"& - 但只是其中的一部分