Поэтому мне нужно разбирать такие вещи:
commit e397a6e988c05d6fd87ae904303ec0e17f4d79a2
Author: Name <[email protected]>
Date: Sat Jul 9 21:29:10 2011 +0400
commit message
1 files changed, 21 insertions(+), 11 deletions(-)
и получить имя автора и количество вставок и удалений.
Для имени у меня это:
re.findall(r"Author: (.+) <",gitLog)
Для чисел у меня это:
re.findall(r" (\d+) insertions\S+, (\d+) deletions",gitLog)
Но я хочу получить список кортежей имени, вставки и деления с одним регулярным выражением.
Я попытался сделать что-то вроде
re.findall(r"Author: (.+) <.+ (\d+) insertions\S+, (\d+) deletions",gitLog,re.DOTALL)
но ничего не возвращает...
Так в чем же моя ошибка? Как должно выглядеть регулярное выражение?
UPADTE: wRAR прав, но почему-то, когда я читаю файл я и пытаюсь его разобрать, я получаю весь файл как имя, а затем последнюю вставку и удаление, поэтому он совпадает со всем файлом, но не с одним фиксатором... [. +] получает весь файл, но не входит в коммит...
Если у вас есть доступ к репо, а не какой-либо текстовый дамп git log
, сохраните проблему разбора и создайте другой выход журнала:
git log --pretty="%an" --numstat
Производит вывод формы:
Имя автора
lines_inserted lines_deleted modified_file
Для чего вам даже не нужно регулярное выражение. Если вы хотите сохранить регулярное выражение, вам нужно сопоставить (+)
после вставки, иначе он не будет совпадать и не будет записывать числа.
Вы должны использовать (напрямую или заимствованием кода) существующие пакеты, такие как GitPython, но о вашем вопросе регулярного выражения, предоставленное регулярное выражение для предоставленного текста возвращает [('Name', '21', '11')]
поэтому я полагаю, верно.
Поэтому ответ на мой вопрос:
re.findall(r"Author: (\S+) <.+\n.+\n\n.+\n\n.+ (\d+) insertions\S+, (\d+) deletions",gitLog)
Но спасибо вам за ответы.