Правильное регулярное выражение Python возвращает NoneType - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь получить некоторые подстроки из текста.

Использование https://pythex.org/ для проверки моего регулярного выражения

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

AttributeError: у объекта 'NoneType' нет атрибута 'group'

Я хочу напечатать переменную uri.Возвращается только метка времени.Пример кода:

import re
line = "2019-01-30 01:05:26.255595500 tracker uri='/tracker_log/?f=__lxGc__&step=1&ses_id=2yz65vcsg0k8zk1952295510&id=123123&type=ad&rt=952301228' referer='https://instagram.com' ua='Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0'"

timestamp = re.match("\d+-\d+-\d+.\d+:.\d+:.\d+.\d+", line)
if timestamp:
    print(timestamp.group(0))
uri = re.match("(?<=uri=\').+(?=\' ref)", line)
if uri:
    print(uri.group(0))

Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 02 февраля 2019

re.match возвращает объект соответствия только в том случае, если начало строки соответствует шаблону регулярного выражения, поэтому вы успешно сопоставляете отметку времени в начале строки, но не соответствует строке uri.

Вместо этого используйте re.search, чтобы вернуть объект сопоставления для первого местоположения в строке, где соответствует шаблон регулярного выражения.

Например:

import re

line = "2019-01-30 01:05:26.255595500 tracker uri='/tracker_log/?f=__lxGc__&step=1&ses_id=2yz65vcsg0k8zk1952295510&id=123123&type=ad&rt=952301228' referer='https://instagram.com' ua='Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0'"

uri = re.search(r"(?<=uri=\').+(?=\' ref)", line)

print(uri.group(0))
# OUTPUT
# /tracker_log/?f=__lxGc__&step=1&ses_id=2yz65vcsg0k8zk1952295510&id=123123&type=ad&rt=952301228
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...