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"