Как сопоставить латексную библиографию в python? - PullRequest
1 голос
/ 13 января 2020

Я пытаюсь получить простой текст из исходного кода LaTeX и хотел бы удалить библиографию. Например,

\begin{thebibliography}{99}
\bibitem{b0} J.Dunietz, J.Hauser, J.L.Rosner, Phys. Rev. {\bf D}35 (1987)
2166
\end{thebibliography}

Я обнаружил модуль detex для извлечения, но я все еще пытаюсь сначала удалить библиографию (используя python re). Сейчас у меня есть:

>>> b = '\newpage\begin{thebibliography}{99}\bibitem{b0} J.Dunietz, J.Hauser\end{thebibliography}'
>>> re.sub('\\\\begin\{thebibliography\}(.*?)\\\\end\{thebibliography\}', ' ', b)
'\newpage\x08egin{thebibliography}{99}\x08ibitem{b0} J.Dunietz, J.Hauser\\end{thebibliography}'

Идеальный результат здесь должен быть: \newpage. Интересно, что я здесь не так делаю? Спасибо!

1 Ответ

0 голосов
/ 13 января 2020

Вы можете использовать необработанные строки, чтобы значительно уменьшить умственную нагрузку при работе с побегами (особенно при работе с побегами как на уровне строк, так и на уровне регулярных выражений). Давайте определим b как необработанную строку (обратите внимание на r''):

b = r'\newpage\begin{thebibliography}{99}\bibitem{b0} J.Dunietz, J.Hauser\end{thebibliography}'

Давайте посмотрим, что мы имеем в строке:

>>> b
'\\newpage\\begin{thebibliography}{99}\\bibitem{b0} J.Dunietz, J.Hauser\\end{thebibliography}'

>>> print(b)
\newpage\begin{thebibliography}{99}\bibitem{b0} J.Dunietz, J.Hauser\end{thebibliography}

Кажется, что строки необработанные чтобы избежать обратной косой черты правильно. Теперь мы можем просто re.sub шаблон с пустой строкой. Опять же, мы будем использовать необработанную строку для определения шаблона для упрощения экранирования:

>>> result = re.sub(r'\\begin\{thebibliography\}.*?\\end\{thebibliography\}', '', b)

>>> result
'\\newpage'

>>> print(result)
\newpage
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...