Я долгое время читатель, в первый раз спрашивающий (пожалуйста, будьте осторожны).Разметка пробела, за исключением внутренних фигурных скобок в файле журнала - Python
Я делаю это с довольно грязным WHILE READ в Unix Bash, но я изучаю python и хотел бы попытаться сделать более эффективную процедуру парсера.
Итак, у меня есть куча файлов журналов, которые в основном ограничены пространством, но содержат квадратные скобки, где также могут быть пробелы. Как игнорировать содержимое в фигурных скобках при поиске разделителей?
(я предполагаю, что библиотека RE необходимо это сделать)
т.е. ввод образца:
[21/Sep/2014:13:51:12 +0000] serverx 192.0.0.1 identity 200 8.8.8.8 - 500 unavailable RESULT 546 888 GET http ://www.google.com/something/fsd?=somegibberish&youscanseethereisalotofcharactershere+bananashavealotofpotassium [somestuff/1.0 (OSX v. 1.0; this_is_a_semicolon; colon:93.1.1) Somethingelse/1999 (COMMA, yep_they_didnt leave_me_a_lot_to_make_this_easy) DoesanyonerememberAOL/1.0]
Желаемый результат:
'21/Sep/2014:13:51:12 +0000'; 'serverx'; '192.0.0.1'; 'identity'; '200'; '8.8.8.8'; '-'; '500'; 'unavailable'; 'RESULT'; '546'; '888'; 'GET'; 'htp://www.google.com/something/fsd?=somegibberish&youscanseethereisalotofcharactershere+bananashavealotofpotassium'; 'somestuff/1.0 (OSX v. 1.0; this_is_a_semicolon; rev:93.1.1) Somethingelse/1999 (COMMA, yep_they_didnt leave_me_a_lot_to_make_this_easy DoesanyonerememberAOL/1.0'
Если вы заметите, что первый и последние поля (те, что были в квадратных скобках) по-прежнему имеют неповрежденные пространства.
Бонусные баллы 14-поле (URL) всегда находится в одном из следующих форматов:
HTP: //google.com/path-data-might-be-here-and- может-содержать-специальные символы-
google.com/path-data-might-be-here-and-can-contain-special-characters
xyz.abc.www.google.com/ путь-данные могут-быть здесь и может содержать-специальный-Ч racters
google.com:443
- google.com
Я хотел бы добавить дополнительный столбец данных, который включает в себя только домен (т.е. xyz.abc.www.google.com или google.com).
До сих пор я принимал разобранный вывод с использованием Unix AWK с инструкцией IF, чтобы разделить это поле на «/» и проверить, не пустое ли третье поле. Если это так, верните первое поле (до тех пор, пока: если оно присутствует), в противном случае верните третье поле). Если есть лучший способ сделать это - желательно в той же процедуре, что и выше, я хотел бы услышать - так что мой окончательный вывод может быть:
'21/Sep/2014:13:51:12 +0000'; 'serverx'; '192.0.0.1'; 'identity'; '200'; '8.8.8.8'; '-'; '500'; 'unavailable'; 'RESULT'; '546'; '888'; 'GET'; 'htp://www.google.com/something/fsd?=somegibberish&youscanseethereisalotofcharactershere+bananashavealotofpotassium'; 'somestuff/1.0 (OSX v. 1.0; this_is_a_semicolon; rev:93.1.1) Somethingelse/1999 (COMMA, yep_they_didnt leave_me_a_lot_to_make_this_easy DoesanyonerememberAOL/1.0'; **'www.google.com'**
Сноска: Я изменил НТТР HTP в образец, поэтому он не создавал бы кучу отвлекающих ссылок.
Да это он. Можете ли вы пройти через часть поиска '' \ [[^ \]] * \] | \ S + ''?Я довольно новичок в регулярном выражении, но стараюсь учиться. –