【问题标题】:Regex - parsing string into groups正则表达式 - 将字符串解析成组
【发布时间】:2015-06-28 17:23:15
【问题描述】:

我有特定的日志消息,我想将其解析为组。如果我的字符串更具体,我想制作一个替代版本。

我的日志:

18:48:24:284 => [DEBUG] [xxx.yyy.zzz] [8] Message1
18:48:24:671 => [INFO] [uuu.www.aaa] [8] Method: 'ReturnType MethodName(MethodParameter)'. Line: ~30. Message2

我写了以下正则表达式:

(?<timestamp>\d+:\d+:\d+:\d+.*)\s+=>\s+\[(?<level>\w+)\]\s+\[(?<emmiter>.*)\]\s+\[(?<thread>\d+)\]\s+(?<message>.*)

它将这些消息解析为特定的组:

timestamp: 18:48:24:284
level: DEBUG
emmiter: xxx.yyy.zzz
thread: 8
message: Message1

timestamp: 18:48:24:671
level: INFO
emmiter: uuu.www.aaa
thread: 8
message: Method: 'ReturnType MethodName(MethodParameter)'. Line: ~30. Message2

但现在我想再添加 2 个组,以防它们存在:方法和行

所以,我想得到这样的结果:

timestamp: 18:48:24:284
level: DEBUG
emmiter: xxx.yyy.zzz
thread: 8
method:
line: 
message: Message1

timestamp: 18:48:24:671
level: INFO
emmiter: uuu.www.aaa
thread: 8
method: ReturnType MethodName(MethodParameter)
line: ~30
message: Message2

你能帮我解决这个问题吗?我所做的一切都会导致仅正确解析 Line1 或仅正确解析 Line2,但我想用一个正则表达式解析它们。

【问题讨论】:

  • 你在运行哪个语言?你的尝试在哪里?
  • 您使用哪种开发环境/语言?请为您的问题添加适当的标签!另外,请提供您已经编写的正则表达式!
  • 我在外部应用程序中使用它。我假设它是java。我已经用我目前的正则表达式状态更新了帖子
  • 好的!那是什么应用程序?
  • @SQLPolice 我正在为 LogMX 应用程序编写正则表达式解析器

标签: java regex


【解决方案1】:

我可以建议以下正则表达式:

(?<timestamp>\d+:\d+:\d+:\d+.*)\s+=>\s+\[(?<level>\w+)\]\s+\[(?<emmiter>.*)\]\s+\[(?<thread>\d+)\](?:\s+Method:\s'(?<method>[^']*)'\s*\.)?(?:\s*Line:\s*(?<line>.+)\.)?\s*(?<message>.*)
                                                                                                                     ^^^^^^              ^                  ^^^^       ^

demo here

我添加了 2 个带有非捕获组的可选组和一个 ? 量词 (?:...)?,称为 methodline

我建议使用(?&lt;method&gt;[^']*) 来捕获除' 之外的所有符号来捕获方法名称,并使用Line:\s*(?&lt;line&gt;.+)\. 来捕获line,这太贪心了,因为我不确定你可能在那里有什么文本。您实际上可以将(?&lt;line&gt;.+) 部分调整为更严格的模式(我想到了~?\d+,但不知道您是否有冒号或其他任何内容)。

【讨论】:

  • 如果您对此有任何疑问,请随时要求澄清。我在上面的答案中发布了一些注意事项。
猜你喜欢
  • 2021-10-05
  • 1970-01-01
  • 2016-04-29
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多