C# 单个正则表达式来解析此日志格式?

C# 单个正则表达式来解析此日志格式?,c#,.net,regex,C#,.net,Regex,我正试图用一个正则表达式在.NET中解析一个日志文件 让它变得困难的是,日志文件中的项可以(但并不总是)跨越多行,而且每个日志文件实际上可能包含多个“日志”。示例格式: log: event 1 event 2 additional information event 3 log: event 1 additional information more additional information event 2

我正试图用一个正则表达式在.NET中解析一个日志文件

让它变得困难的是,日志文件中的项可以(但并不总是)跨越多行,而且每个日志文件实际上可能包含多个“日志”。示例格式:

log: event 1 event 2 additional information event 3 log: event 1 additional information more additional information event 2 additional information 日志: 事件1 事件2 补充资料 事件3 日志: 事件1 补充资料 更多附加信息 事件2 补充资料 这里的必要性是能够区分哪些事件属于哪个日志,并捕获附加信息。当然,我能够抓住事件。。。我无法获取带有附加信息的事件,更不用说将它们分组到日志捕获中:


我希望得到信息,而不是一个解决方案,这样我可以学习。我想我的问题是:这可能吗?已经用解析器完成了,我只是想找到替代方法。

手动解析似乎比在正则表达式中解析更容易、更透明。模式非常简单。

为什么要尝试使用一个正则表达式来实现这一点?使用合适的解析器

正则表达式对于简单的字符串操作来说是非常棒的,但是一旦你掌握了更复杂的东西,一个实际的解析器就更好了。

可以(而且相当容易)使用一个模式分别提取每个日志条目,但不必使用相同模式中的捕获将匹配分为信息组


您需要做的是为信息行构造一个模式(基本上,空格后跟行尾的其他内容),并重复它。

有可能,几乎任何基于文本的内容都可以使用正则表达式,但这并不是一个好主意,在这种情况下解析它可能更好,你能给出一个输入/输出的例子吗?如果你不必…现在就保存你自己,否则就太晚了!是的,我倾向于同意。使用嵌套内容和多行格式时,正则表达式变得更加困难。举个简单的例子(假设格式是发布的),
/\n[^\n]*(\n[^\n]*)*/
应该(未测试)匹配一个条目和任意数量的附加内容行。呃,看起来空格已经被压缩了。我相信你知道我的意思,这确实管用。如前所述,我认为需要一个合适的解析器来处理一个日志文件中可以存在多个“日志”的事实。话虽如此,我可以轻松地拆分文件,然后使用简单的RegExp抓取事件。