【发布时间】:2019-04-14 15:52:56
【问题描述】:
我需要从 txt 文件中读取一些日志数据并进行相应的拆分。
我的示例文件看起来像这样:
11:03:04.234 DEBUG event occurred
11:03:05.345 INFO another event occurred
11:03:06.222 ERROR notice that this event
occupies multiple lines
as errors can be from multiple sources
and I have no control over this
11:04:07.222 INFO fourth event has happened
我决定不使用StreamReader,因为它看起来是最有效的方式。我使用StreamReader 的ReadToEnd() 方法读取了文件的所有内容并接收到一个大字符串。然后,我尝试使用正则表达式来拆分字符串。到目前为止,我能够提出的正则表达式模式如下所示:([0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9].*).
当然,在 Regex 解析多行事件之前,它工作得非常好。
我使用this tool 来测试我的模式。
【问题讨论】:
-
试试
(?m)^(?!\A)(?=\d{2}:\d{2}:\d{2}\.\d{3}) -
那么问题是什么?
-
如何读取一行,检查时间戳,如果有,解析 INFO/DEBUG/ERROR 部分,捕获文本,创建一个新的 LogResd 条目。如果行首没有时间戳,则丢弃前导空格并将文本连接到最后创建的条目