Поиск авторских строк и замена вопроса - PullRequest
0 голосов
/ 19 декабря 2018

Как написать регулярное выражение для сопоставления строки Copyright (C) 2017 - 2018,

Вот мой код,

import re
find = 2018
COPYRIGHT_PATTERN = re.compile(
    r'Copyright (C) \d{4} - {0},'.format(find)
)

test_str = 'Copyright (C) 2002 - 2018,'
if COPYRIGHT_PATTERN.match(test_str):
    print('Found match')

Но это не работает.Я также хочу заменить 2018 на 2019.

1 Ответ

0 голосов
/ 19 декабря 2018

Вы можете исправить текущий код следующим образом:

import re
find = 2018
COPYRIGHT_PATTERN = re.compile(
    r'(Copyright \(C\) \d{{4}} - ){0},'.format(find)
)

test_str = 'Copyright (C) 2002 - 2018,'
print(COPYRIGHT_PATTERN.sub(r'\g<1>2019', test_str))

См. Демо Python

Подробности

  • В форматированной строке литерал { и } должен быть удвоен.
  • Символы ( и ) должны быть экранированы в регулярном выражении, чтобы соответствовать литеральным скобкам
  • Если вы хотите заменить, используйте re.sub, а не re.match
  • Для сопоставления и сохранения части совпадения используйте группу захвата (см. Неэкранированные скобки, которые я добавил в начале и перед {0})
  • Заменить на обратную ссылку и цифру сразу после того, как рекомендуется использовать однозначные обратные ссылки, \g<X>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...