我正在尝试从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