使用python从LaTeX文件中提取特定部分

时间:2016-08-26 01:30:22

标签: python regex latex

我有一套LaTeX文件。我想提取"摘要"每个部分:

\begin{abstract}

.....

\end{abstract}

我在这里尝试了这个建议:How to Parse LaTex file

并尝试过:

A = re.findall(r'\\begin{abstract}(.*?)\\end{abstract}', data)

其中数据包含LaTeX文件中的文本。但是A只是一个空列表。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:5)

除非给出了re.S标志,否则

.*与换行符不匹配:

re.findall(r'\\begin{abstract}(.*?)\\end{abstract}', data, re.S)

实施例

考虑这个测试文件:

\documentclass{report}
\usepackage[margin=1in]{geometry}
\usepackage{longtable}

\begin{document}
Title maybe
\begin{abstract}
Good stuff
\end{abstract}
Other stuff
\end{document}

这得到了摘要:

>>> import re
>>> data = open('a.tex').read()
>>> re.findall(r'\\begin{abstract}(.*?)\\end{abstract}', data, re.S)
['\nGood stuff\n']

文档

来自re module's webpage

  

re.S
re.DOTALL

     

制作'。'特殊字符匹配任何字符   所有,包括换行;没有这个标志,'。'会匹配任何东西   除了换行符。

答案 1 :(得分:1)

.与换行符不匹配。但是,您可以传递一个标志,要求它包含换行符。

示例:

import re

s = r"""\begin{abstract}
this is a test of the
linebreak capture.
\end{abstract}"""

pattern = r'\\begin\{abstract\}(.*?)\\end\{abstract\}'

re.findall(pattern, s, re.DOTALL)

#output:
['\nthis is a test of the\nlinebreak capture.\n']