Regex для поиска пробелов между кавычками в Graylog

Работая над проблемой средства извлечения ввода с журналами IIS, используя "продвинутый" инструмент входа в систему IIS, чтобы собрать больше, чем предоставляют базовые журналы. Он добавляет двойные кавычки и пробелы во многие поля, и мы пытаемся использовать экстрактор, чтобы исправить это. Это начало примера сообщения:

2016-02-08 16:46:35.957 "SITE" "SOURCE" XX.XX.XX.XX GET /blah/etc/etc/file.ext - 80 - "XX.XX.XX.XX" "HTTP/1.1" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie11; rv:11.0) like Gecko"

Мы уже написали экстрактор, чтобы удалить все добавленные кавычки, прежде чем запускать его через все другие экстракторы для заполнения полей и т. Д., Но мы хотим заменить все пробелы между кавычками на + прежде чем мы сделаем это, чтобы соответствовать старому стилю ведения журнала.

Кто-нибудь может указать нам правильное направление для этого? Самое близкое, куда я зашел, это ловить " " между сайтом и источником и заменой, что-то вроде "([\s]*)", Результат:

2016-02-08 16:46:35.957 "SITE+SOURCE" XX.XX.XX.XX GET /blah/etc/etc/file.ext - 80 - "XX.XX.XX.XX+HTTP/1.1+Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie11; rv:11.0) like Gecko"

Я не могу искать только пробелы между кавычками.

Любая помощь будет принята с благодарностью. Благодарю.


Дальнейшее уточнение. Эта часть строки:

"Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie11; rv:11.0) like Gecko"

Должно быть:

"Mozilla/5.0+(Windows+NT+6.1;+WOW64;+Trident/7.0;+yie11;+rv:11.0)+like+Gecko"

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

Это возможно даже с регулярным выражением?

1 ответ

Я боюсь, что регулярные выражения не лучший инструмент для этого. Вы в основном должны "считать" кавычки, чтобы определить, находится ли пробел в кавычках или нет.

Вы можете попробовать что-то вроде этого (Python):

text = '2016-02-08 16:46:35.957 "SITE" "SOURCE" XX.XX.XX.XX GET /blah/etc/etc/file.ext - 80 - "XX.XX.XX.XX" "HTTP/1.1" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie11; rv:11.0) like Gecko"'
escaped = ""
count = 0
for c in text:
    if c == '"':
        count += 1
    if c == " " and count % 2 == 1:
        escaped += "+"
    else:
        escaped += c

После этого, escaped это:

2016-02-08 16:46:35.957 "SITE" "SOURCE" XX.XX.XX.XX GET /blah/etc/etc/file.ext - 80 - "XX.XX.XX.XX" "HTTP/1.1" "Mozilla/5.0+(Windows+NT+6.1;+WOW64;+Trident/7.0;+yie11;+rv:11.0)+like+Gecko"
Другие вопросы по тегам