【发布时间】:2015-03-23 18:22:32
【问题描述】:
我正在尝试从 tex 文件中提取所有 Latex 命令。我必须为此使用 Python。我尝试使用 Re 模块提取列表中的乳胶命令。
问题在于该列表不包含名称中包含特殊字符(如\alpha*、\a'、\#、\$、+、:、\;等)的latex 命令。它只包含由字母组成的乳胶命令。
我目前正在使用 re.match python 命令:
"I already know the starting index of '\' which is at self.i.
The example Latex code string could be:
\documentclass[envcountsame,envcountchap]{svmono}"
match_text = re.match("[\w]+", search_string[self.i + 1:])
我能够提取“文档类”。但是假设有另一个命令,例如:
"\abstract*[alpha]{beta}"
"\${This is a latex document}"
"\:"
如何从这些字符串中仅提取 'abstract*'、'$'、':'?
我是 Python 新手,尝试了各种方法,但无法提取所有这些命令名称。如果有一个通用的 python 正则表达式可以处理所有这些情况,那将会很有用。
注意:一本名为“The Not So Short Introduction to LaTeX”的书定义了 LaTeX 命令的格式可以分为三种类型 -
格式:
它们以反斜杠 \ 开头,然后具有由以下组成的名称 仅限字母。命令名称以空格、数字或 任何其他“非字母”。
它们由一个反斜杠和一个非字母组成。
许多命令存在于“星号变体”中,其中一个星号附加到命令名称中。
【问题讨论】:
-
似乎
r'\\([a-zA-Z]+)(\*)?'与re.findall一起使用时差不多... -
对于包命令,
@是一个字母,但如果没有更大的文件上下文,您就无法捕捉到这种情况,即不能合理地使用正则表达式。 -
\abstract*[alpha]{beta}实际上是命令\abstract带有三个参数,星号本身,可选的第二个参数和用大括号括起来的普通参数,那么为什么要使用第一个参数,如果它是星号而不是其他地方?