#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