我正在尝试从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。我想知道我在做什么错吗?谢谢!

最佳答案

您可以使用原始字符串,以大大减少处理转义符的精神负担(尤其是在字符串和正则表达式级别同时处理转义时)。让我们将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

10-04 13:02