Что такое регулярное выражение для перехвата всех строк нижнего колонтитула git commit в выводе журнала git? - PullRequest
1 голос
/ 27 февраля 2012

Я пишу скрипт для удаления тегов git commit (например, Signed-off-by:, Reviewed-by:) из каждого сообщения git commit. В настоящее время скрипт находится в Python. Прямо сейчас у меня есть очень простая проверка re.match("Signed-off-by:", line). Но я думаю, что должно быть более элегантное решение с использованием регулярных выражений.

Я предполагаю, что нижний колонтитул начинается с [больше слов, разделенных на -]: например,

Bug:, Issue:, Reviewed-by:, Tested-by:, Ack-by:, Suggested-by:, Signed-off-by:

Шаблон должен игнорировать регистр. Мне нужна помощь, чтобы найти решение с использованием регулярного выражения для этого. Я также хочу узнать больше о RE, что является хорошей отправной точкой?

Фактический скрипт Python находится здесь https://gerrit -review.googlesource.com / # / c / 33213/2 / tools / gitlog2asciidoc.py

Вы также можете прокомментировать сценарий, если зарегистрируетесь в учетной записи.

Спасибо

Ответы [ 3 ]

1 голос
/ 27 февраля 2012
>>> def match_commit(s):
    r = re.compile(r'((\w+*)+\w+:)')
    return re.match(r, s) is not None

>>> match_commit("Signed-off-by:")
True
>>> match_commit("Signed-off+by:")
False
>>> match_commit("Signed--by:")
False
>>> match_commit("Bug:")
True
>>> match_commit("Bug-:")
False

1-я группа (\w+-)* фиксирует 0 для любых повторений шаблонов "word + '-'", последний \w+: ищет последнее слово + ':'.

1 голос
/ 27 февраля 2012

Несмотря на то, что подход с регулярными выражениями был бы полезен, и с помощью всего лишь флага вы можете игнорировать регистр, я думаю, что в этом случае вы можете просто использовать startswith для достижения той же цели:

prefixes = ['bug:', 'issue:', 'reviewed-by:', 'tested-by:',
            'ack-by:', 'suggested-by:', 'signed-off-by:']
...
lower_line = line.lower()
for prefix in prefixes:
    if lower_line.startswith(prefix):
        print 'prefix matched:', prefix
else:
    print 'no match found'
0 голосов
/ 27 февраля 2012

Это хороший вариант использования для any:

for line in logfile:
    if any(line.lower().startswith(prefix) for prefix in prefixes):
        print line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...