Регулярное выражение для сопоставления с ОШИБКОЙ или ИНФОРМАЦИЕЙ, но с разными действиями в зависимости от соответствия

#python #regex

#python #регулярное выражение

Вопрос:

Я просматриваю файл журнала, чтобы перечислить, сколько сообщений об ОШИБКАХ и ИНФОРМАЦИОННЫХ сообщений сгенерировал каждый пользователь. Я пытаюсь сделать это в одном шаблоне регулярных выражений и добавить захваченную строку в другой список в зависимости от того, является ли строка ОШИБКОЙ или информационным сообщением. Содержимое файла журнала выглядит следующим образом:

31 января 00:21:30 ubuntu.local ticky: ОШИБКА, запрос был изменен при обновлении (john123)

31 января 00:44:34 ubuntu.local ticky: ИНФОРМАЦИЯ закрыта [#1754] (jack456)

Комментарии:

1. Для этого вам не нужно регулярное выражение: if 'INFO' in line: info_list.append(line); и т.д.

2. Управление логикой программы не относится к области регулярных выражений. Они сопоставляют вещи, но они не решают, что делать с тем, что они сопоставили.

3. Это только одна часть более крупного проекта, который я делаю для онлайн-курса, требующего использования регулярных выражений. Но ваше объяснение все равно помогло, спасибо 🙂

Ответ №1:

Сначала я хочу указать, что, вероятно, было бы намного проще сделать это с помощью простых операторов if, проверяя, есть ли подстроки в строке журнала

 for line in log_contents:
    if "ERROR" in line:
        # do error actions
    elif "INFO" in line:
        # do info actions
  

Если вы полны решимости использовать регулярное выражение, что-то подобное должно сработать, и я бы посоветовал посмотреть документы для пакета re python для получения дополнительной информации об использовании регулярных выражений в python:

 import re

# read log file into `log_contents`

pattern = re.compile("(ERROR|INFO)")

for line in log_contents:
    match = pattern.search(line)
    if match is not None:
        if match.group(0) == "Error":
            # do error actions
        elif match.group(0) == "INFO":
            # do info actions