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

8
我有一组LaTeX文件。我想提取每个文件的"摘要"部分:
\begin{abstract}

.....

\end{abstract}

我尝试了这里提供的建议:如何解析LaTex文件

并尝试了:

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

数据包含来自LaTeX文件的文本。但A只是一个空列表。非常感谢您的任何帮助!


什么是data,你是如何生成它的?你可能需要使用re.DOTALL选项,使.能够匹配换行符。 - TessellatingHeckler
在这种特定情况下,您需要使用正则表达式进行解析(可能会在某些边缘情况下失败),但是有一个使用Python的LaTeX解析库的解决方案 - user202729
2个回答

10

.* 不匹配换行符,除非使用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模块的网页

re.S
re.DOTALL

使'.'特殊字符匹配所有字符,包括换行符;如果没有此标志,'.'将匹配除换行符之外的任何字符。


4
.不匹配换行符。 但是,您可以传递一个标志来请求包含换行符。
例如:
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']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接