我正在寻找最优雅的方法来解析它。当涉及到我的正则表达式知识时,我只是碰壁了,也许正则表达式甚至不是最好的答案?
我有三个例句来举例说明我想做什么。我想将这些解析为四个部分。攻击者、攻击类型、伤害和目标。
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/