1

我正在解析日志文件并尝试匹配错误语句。我匹配“错误 CS”的那部分行将适用于许多行,有些重复有些不重复。有没有办法我不能返回重复项。使用 Java 风格的 RegEx..

示例:我的简单正则表达式返回

Class1.cs(16,27): error CS0117: 'string' does not contain a definition for 'empty'
Class1.cs(34,20): error CS0103: The name 'thiswworked' does not exist in the current context
Class1.cs(16,27): error CS0117: 'string' does not contain a definition for 'empty'
Class1.cs(34,20): error CS0103: The name 'thiswworked' does not exist in the current context

希望它返回:

Class1.cs(16,27): error CS0117: 'string' does not contain a definition for 'empty'
Class1.cs(34,20): error CS0103: The name 'thiswworked' does not exist in the current context
4

2 回答 2

2

从技术上讲,使用正则表达式是不可能的。你需要更强大的东西。

正则表达式用于匹配正则语言。您尝试匹配的模式不规则。

您需要表达式记住一些“状态”、先前匹配的错误,并且正则表达式并不意味着处理这种类型的计算。图灵机能够保存状态。这更符合您的需要。(Java 很适合。)

在找到所有错误行后,通过在日志解析器中添加一些额外的逻辑可以很容易地解决这个问题。

于 2010-11-02T14:17:39.777 回答
2

一种解决方案是使用您的正则表达式进行匹配,然后将该行放入一个数据结构中,例如为您处理删除重复项的集合。在解析结束时只打印集合的内容。

如果您担心顺序,您可以添加到某种映射中,其中行作为键,行号作为值(也许在插入之前检查匹配的条目)。如果您按值排序,您将获得给定行的第一个实例的列表。

于 2010-11-02T16:14:39.050 回答