gpt4 book ai didi

java - 正则表达式 - 将字符串解析为组

转载 作者:行者123 更新时间:2023-11-30 08:50:10 25 4
gpt4 key购买 nike

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

我的日志:

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,但我想用一个正则表达式解析它们。

最佳答案

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

(?<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 .

我建议使用 (?<method>[^']*)捕获除 ' 以外的所有符号捕获方法名称,Line:\s*(?<line>.+)\.捕获line那太贪心了,因为我不确定您那里可能有什么文字。您实际上可以调整 (?<line>.+)部分到一些更具限制性的模式(我想到了 ~?\d+ 但不知道那里是否有冒号或其他任何东西)。

关于java - 正则表达式 - 将字符串解析为组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31102600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com