2
|
Erik van Brakel scottrakes · 技术社区 · 17 年前 |
![]() |
1
3
仅当日志消息不包含行首的日期时,此操作才有效,但您可以尝试在“消息”组中为日期添加否定的先行声明:
请注意,这需要使用regexoptions.multiline标志。 |
![]() |
2
2
显然,您需要将“消息行”与“日志行”区分开来;如果您允许消息部分在新行之后以日期/时间开始,那么就无法确定什么是消息的一部分,什么不是。因此,您不需要使用点,而是需要一个表达式,它允许任何不包括换行符、日期和时间的内容。 但就个人而言,我不会使用正则表达式来解析整个日志条目。我更喜欢使用自己的循环对每行进行迭代,并使用一个简单的正则表达式来确定一行是否是新条目的开头。从可读性的角度来看,这也是我的偏好。 |
![]() |
3
1
问题是您需要终止regex模式,这样它就知道一条消息何时结束,然后下一条消息何时开始。 在默认模式下运行时,换行符作为隐式终止符工作。 问题是,如果您进入多行模式,就没有终止符,因此模式将吞没整个文件。非贪心匹配几个字符,可能只有一个。 现在,如果使用下一条消息的日期作为终止符,我认为您的解析器将只得到其他每一行。 文件中是否还有其他东西可以终止模式? |
![]() |
4
0
您可能会发现使用适当的解析器生成器来解析文件要容易得多-Antlr可以在C中生成一个。上下文无关的解析器只有在你“得到”它们之前才显得很难——之后,它们比正则表达式更简单、更友好… |
![]() |
5
0
你需要通过
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 7 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 7 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 7 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 7 月前 |