Regex для возврата уникальных строк при совпадении с шаблоном - PullRequest
1 голос
/ 22 сентября 2010

Я анализирую файл журнала и пытаюсь сопоставить сообщения об ошибках.Часть строки, которую я соответствую "ошибка CS", будет применена ко многим строкам, некоторые дубликаты, некоторые нет.Есть ли способ, которым я не могу вернуть дубликаты.Используя Java пример RegEx ..

: мой простой 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

Ответы [ 2 ]

2 голосов
/ 02 ноября 2010

Одним из решений является сопоставление с использованием вашего регулярного выражения, а затем помещение строки в структуру данных, например set , которая занимается удалением дубликатов для вас. По окончании разбора просто распечатайте содержимое набора.

Если вас беспокоит порядок, вы можете добавить к карте какого-либо вида строку с ключом и номер строки в качестве значения (возможно, проверяя соответствие записи перед вставкой). Если вы сортируете по значению, вы получите список первого экземпляра данной строки.

2 голосов
/ 02 ноября 2010

Технически, с регулярным выражением, это невозможно. Вам нужно что-то более мощное.

Регулярные выражения предназначены для сопоставления регулярных языков. Шаблон, который вы пытаетесь сопоставить, не является регулярным.

Требуется, чтобы выражение запоминало некоторое «состояние», ранее найденные ошибки и регулярные выражения, не предназначенные для обработки этого типа вычислений. Машина Тьюринга способна сохранять состояние. Это больше похоже на то, что вам нужно. (Java прекрасно подойдет для этого.)

Это может быть довольно легко решено добавлением некоторой дополнительной логики в ваш анализатор журналов после того, как вы найдете все строки ошибок.

...