Python регулярные выражения для печати 2 элементов из матча - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь извлечь идентификатор процесса и слово «ОШИБКА» из следующей строки.

July bad_process[12345]: ERROR

С помощью следующего кода я могу напечатать идентификатор процесса, но не могу напечатать слово «ОШИБКА». Если я возвращаю индекс 0, я получаю эту строку.

[12345]: ERROR

Если я возвращаю 1 индекс, я получаю только идентификатор процесса

123456

Но, возвращая индекс 2, я не получаю слово «ОШИБКА». Как вернуть идентификатор, а также слово «ОШИБКА»?

def extract_pid(log_line):
    regex = r"\[(\d+)\]: [A-Z]+"
    result = re.search(regex, log_line)
    if result is None:
        return ""
    return result[1]

print(extract_pid(log))

1 Ответ

2 голосов
/ 19 апреля 2020

Вы должны добавить вторую группу захвата и использовать re.findall , чтобы найти все совпадения.

С re.search - документация :

re.search (pattern, string, flags = 0)

Просматривать строку в поисках первого местоположения , где шаблон регулярного выражения выдает совпадение и вернуть соответствующий экземпляр MatchObject.

import re

def extract_pid(log_line):
    regex = r"\[(\d+)\]: ([A-Z]+)"           # added grouping for 2nd group
    matches = re.findall(regex, log_line)
    return matches

print( extract_pid("""July bad_process[12345]: ERROR
July bad_process[42]: INFO""") ) 

Вывод:

[('12345', 'ERROR'), ('42', 'INFO')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...