Регулярное время, дата, идентификатор - PullRequest
0 голосов
/ 14 апреля 2020

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

import re

def show_time_of_pid(line):


    pattern=r"^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec).*\d{2}:\d{2}:\d{2}\[(\d+)\]"
    result = re.search(pattern, line)

    return result

Это:

print(show_time_of_pid("Jul 6 14:01:23 computer.name CRON[29440]: USER (good_user)"))

Должно быть напечатано:

Jul 6 14:01:23 pid:29440

Что нам не хватает в show_time_of_pid реализации?

1 Ответ

0 голосов
/ 14 апреля 2020

В вашем коде есть несколько проблем:

  • [ и ] должны быть экранированы в виде регулярных выражений, поскольку это специальные символы (обозначают набор символов).
  • Вы не использовали группу для даты и времени, поэтому вы не сможете получить ее из результата позже.
  • Вы не пытались получить эти группы (на самом деле есть группа для месяц и за пид) из результатов поиска. Вы только что попытались напечатать объект результатов поиска.

Я бы порекомендовал прочитать документы о [] и группах. Также HOWTO отлично подходит в это время года.

Вот рабочий пример:

import re

def show_time_of_pid(line):
  pattern=r"^(?P<date_time>(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d{,2}\s+\d{2}:\d{2}:\d{2}).*\[(?P<pid>\d+)\]"
  re_result = re.search(pattern, line)

  result = f"{re_result.group('date_time')} pid:{re_result.group('pid')}"

  return result

print(show_time_of_pid("Jul 6 14:01:23 computer.name CRON[29440]: USER (good_user)"))

Вывод:

Jul 6 14:01:23 pid:29440
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...