使用正则表达式解析多线控制台输出

时间:2018-05-24 11:19:12

标签: c# .net regex

我正在构建一个服务,它调用我已编写的程序来完成一些工作。我正在使用一个进程来调用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的新手,无法找到有关此类解析的有用信息。

由于

1 个答案:

答案 0 :(得分:2)

你可以尝试:

(?m)^\[([^]]*)\](.*\n?(?!^\[))*

流程就是这样:

匹配以方括号[...]开头的行,然后使用贪婪点.*匹配到行尾。现在在行的末尾匹配换行符\n(可选)并查看下一行是否不再以括号开头。如果它没有(由负向前瞻(?!^\[)完成),重复相同的正则表达式组(*意味着尽可能多或没有)。

查看实时demo here