Как использовать регулярные выражения для поиска элементов с или без двойных кавычек? - PullRequest
0 голосов
/ 14 марта 2019

У меня есть список журналов Apache, которые я хочу просмотреть и разделить каждый элемент на новый список.

Например

83.149.9.216 - - [17/May/2015:10:05:03 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"

Однако одна из записей не имеет конечной кавычки в последнем элементе (пользовательский агент)

46.118.127.106 - - [20/May/2015:12:05:17 +0000] "GET /scripts/grok-py-test/configlib.py HTTP/1.1" 200 235 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html

Я использую это регулярное выражение,

apacheTup = re.match('([(\d\.)]+) (.*) (.*) \[(.*?)\] "(.*?)" (\d+) (.*?) "(.*?)" "(.*?)"',fileStr).groups()

Однако я получаю сообщение об ошибке

Объект 'NoneType' не имеет атрибута 'groups'

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

1 Ответ

0 голосов
/ 14 марта 2019

Вы можете добавить двойную кавычку, когда ее нет.

fileStr += '' if fileStr.endswith('"') else '"'
apacheTup = re.match( ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...