Основная проблема здесь - формат авторских прав. Если вы связываете условия только с двумя строками в своем ответе, то это легко, как показано в ответах выше.
Но если вы попытаетесь пойти глубже, вы столкнетесь с несколькими проблемами. Давайте переформулируем задачу: «Для данной строки авторского права A определите, является ли A действительной линией авторского права или нет».
Во-первых, мы должны заметить, что в соответствии с US Copyright law, если вы используете уведомление об авторских правах (обратите внимание, что это не обязательно!), То вы должны использовать все три следующих:
- символ Copyright или «Авторское право» слово , или короткая версия "Copr."
- Год первой публикации (или нескольких лет). Таким образом, все эти годы являются действительными: «2015», «2010-2015», «2005, 2009, 2010-2013, 2015»
- Имя владельца авторских прав.
И эти три могут пойти в любом порядке, на самом деле. Я предполагаю, что в полной форме решить эту задачу практически невозможно, используя regexp. Но даже если вы связали годы с одним или двумя, разделенными тире, это будет все еще очень сложное регулярное выражение.
Во-вторых, даже если вы написали «идеальный детектор авторских прав», когда вы примените его к файлам \ линиям, которые вы хотите проверить, если будете удивлены. Потому что, если вы проверяете не пару файлов \ lines, а десятки тысяч, вы увидите, что разработчикам контента не очень нравится формат. Начиная с простых вопросов, таких как не использовать имя владельца авторских прав («Авторское право (C) 2015») и до использования дополнительного уведомления («Все права защищены»), меняя регистр букв («авторское право» или «Авторское право»), разные (2010-2015 гг.), «2010» (2015) «OMG, 2010 - 2015» с дополнительными пробелами и т. д.) и многих других случаях.
Вы заботитесь о значении года? Минимум 2000 или что-то еще? Если я не думаю, что '// Copyright \ (c \) (\ d {4} \ s * - \ s *)? \ D {4}' будет делать это (также escape '/', если это разделитель). – chris85
Значение первого года на самом деле не так важно, оно должно быть всего 4 цифры. Второй год, однако, всегда будет в текущем году, поэтому было бы здорово настроить решение, чтобы, возможно, получить это значение от переменной. – pabloxrl
Вы должны иметь возможность сделать эту переменную, а не просто конкатенировать ее с регулярным выражением. Я не знаю python, хотя и не могу сказать, как это сделать. В php это будет нечто вроде 'preg_match ('~ // Авторское право \ (c \) (\ d {4} \ s * - \ s *)?'. $ Year. '~','.'preg_match' - это функция, которая проверяет соответствие регулярных выражений, а' ~ '- разделители. – chris85