保留原始消息并在正则表达式中提取捕获的字段

keeping original message as well as extract Captured fields in regex

我正在使用正则表达式解析行

字符串:2013-3-03 14:27:33 [main] INFO Main - Start

正则表达式:/^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}) \[(?<thread>.*)\] (?<level>[^\s]+)(?<msg>.*)/

此正则表达式提取以下字段

"thread" :"main",
"level"  :"INFO",
"msg":"  Main - Start"

我想要的输出是:

"Message" : "2013-3-03 14:27:33 [main] INFO  Main - Start"
"thread" :"main",
"level"  :"INFO",
"msg":"  Main - Start"

由于我只能解析一次字符串消息,有没有一种方法可以实现所需的输出,同时保留 RAW 消息和提取文件?

如果要命名,可以将整个图案包裹在另一组中(?<message>

您可以使用否定字符 \[(?<thread>[^\]\[]*)] class 编写组 thread 而不是使用 .*

来防止一些回溯

[^\s]+可以写成\S+

^(?<message>(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}) \[(?<thread>[^\]\[]*)\] (?<level>\S+)(?<msg>.*))

看到一个regex demo