В моем коде Python
у меня есть строка, и я пытаюсь найти, содержит ли строка определенный c шаблон (имя (я) после номера). Для этого я использую re.match
, затем groups()
, чтобы получить требуемый результат, подобный этому.
authors_and_year = re.match('(.*)\. (\d{4})\.', line)
texts, authors, year = authors_and_year.groups()
поэтому, если у меня есть такая строка
Regina Barzilay and Lillian Ли. 2004. Поймать смещение: модели содержания Probabilisti c с приложениями для генерации и обобщения. В материалах NAACL-HLT.
Он вернет мне это ( Как ожидалось );
('Regina Barzilay and Lillian Lee. 2004.', 'Regina Barzilay and Lillian Lee', '2004')
Но в некоторых случаях у меня есть строки вот так;
Дж. Коэн. 1968a. Взвешенная каппа: Соглашение по номинальной шкале с резервом на случай масштабного несогласия или частичного кредита. том 70, страницы 213–220
или это;
Ральф Вайшедель, Цзиньси Сюй и Ана Ликуанан. 1968b. Гибридный подход к ответам на биографические вопросы. В Mark Maybury, редакторе New Directions In Question Answering, глава 5. AAAI Нажмите
Где Год имеет алфавит, , поэтому верхнее регулярное выражение здесь не удалось . И чтобы справиться с этим сценарием, я пытаюсь добавить с ним новое регулярное выражение следующим образом:
authors_and_year = re.match('((.*)\. (\d{4})\.|(.*)\. (\d{4})(a-z){1}\.)', line)
texts, authors, year = authors_and_year.groups()
Но это дает мне эту ошибку;
ValueError: слишком много значений распаковать (ожидается 3)
Когда я проверил authors_and_year
значение, было так:
('Regina Barzilay and Lillian Lee. 2004.', 'Regina Barzilay and Lillian Lee', '2004', None, None, None)
Я не знаю, откуда последние 3 None
значения идут. Может ли кто-нибудь подсказать мне, что я здесь делаю не так ??