Вот строка, например:
Clone into repo1...
some text
Clone into repo2...
some text
Clone into repo3...
some text
fatal: Some exception was thrown.
Я пытаюсь получить последний "Клон в repo3" и фатальное сообщение. Вот регулярное выражение, которое я пишу: (Clone into.+fatal:.+?$)
с флагами, re.DOTALL
и `re.MULTILINE
Но я получил все сообщение. Я знаю, что каким-то образом мы можем сделать это .*(Clone into.+fatal:.+?$)
, но текст, который я имею в виду, действительно большой, если использовать .*
спереди, это приведет к огромным затратам времени.
Спасибо всем за вашу помощь!
РЕДАКТИРОВАТЬ
Я ищу способ регулярного выражения, потому что у меня есть почти десять регулярных выражений, и я не знаю, какое регулярное выражение будет сопоставлено.
Вот структура, которую я написал:
# Here's almost 10 compiled regex, some of them have this duplicated issue.
regex_list = [...]
for regex in regex_list:
res = regex.findall(log_text)
if res:
reason = res[0]
break
Если нет способа справиться с этой проблемой с помощью регулярных выражений, возможно, я пересмотрю вопрос об изменении всех этих регулярных выражений в общую функцию, чтобы сначала выполнять rsplit
.
Кстати, способ rsplit
требует остановки теста после выдачи фатальной ошибки. Если тест продолжает выполняться после возникновения фатальной ошибки, этот метод не будет соответствовать исключению ...