我正在构建一个服务,它调用我已编写的程序来完成一些工作。我正在使用一个进程来调用exe&传递一些论点。我正在听程序的输出,所以我可以确定在我的程序中使用的过程是否成功。
我在编写正则表达式以解析以下日志时遇到问题。下面是一些cmd输出的示例,您可以看到一些输出可以是多行输出。
[My Custom Exe][2018-05-24 11:03:01] Starting Process
[My Custom Exe][2018-05-24 11:03:01] Getting config
[My Custom Exe][2018-05-24 11:03:02] Beginning operation
[My Custom Exe][2018-05-24 11:03:02] Could not complete this operation, invalid inputs
[My Custom Exe][2018-05-24 11:03:02] Available inputs are:
- 1: Mode 1
- 2: Mode 2
- 3: Mode 3
- 4: Mode 4
- 5: Mode 5
[My Custom Exe][2018-05-24 11:03:02] Exiting Program
当我从程序中得到这个输出时,我需要解析一个字符串,所以我使用正则表达式来创建一个控制台输出数组。
我希望按每个新日志解析控制台输出,所以我看到[My Custom Exe]
所有内容我想在包含此字符串后的所有内容的数组中添加新索引,直到看到再次[My Custom Exe]
,重新开始。
对于这个例子,我的数组中应该有6个元素,我已经设法让我的Regex工作为单行,但是我无法将所有条目5都放到我的语句中。
我的正则表达字符串= /\[(.*?)\](.*)/g
Here is a link to a demo of this regex, so you can see my issue.
我是RegEx的新手,无法找到有关此类解析的有用信息。
由于
答案 0 :(得分:2)
你可以尝试:
(?m)^\[([^]]*)\](.*\n?(?!^\[))*
流程就是这样:
匹配以方括号[...]
开头的行,然后使用贪婪点.*
匹配到行尾。现在在行的末尾匹配换行符\n
(可选)并查看下一行是否不再以括号开头。如果它没有(由负向前瞻(?!^\[)
完成),重复相同的正则表达式组(*
意味着尽可能多或没有)。
查看实时demo here