我正在尝试从tex文件中提取所有的latex命令。我需要使用Python来完成这个任务。我尝试使用Re模块将latex命令提取到一个列表中。
问题在于,这个列表不包含名称包含特殊字符的latex命令(例如\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:])
我可以提取'documentclass'。但是假设还有另一个命令,例如:
"\abstract*[alpha]{beta}"
"\${This is a latex document}"
"\:"
我应该如何从这些字符串中仅提取'abstract *','$',':'?
我是Python的新手,尝试了多种方法,但无法提取所有这些命令名称。如果有一个通用的Python Regex可以处理所有这些情况,那将会很有用。
注意:一本名为“The Not So Short introduction to LaTeX”的书定义了LaTeX命令的格式可以分为三种类型- 格式:
1. 以反斜杠\开头,后跟由字母组成的名称。命令名称以空格、数字或任何其他“非字母”字符终止。 2. 它们由反斜杠和正好一个非字母组成。 3. 许多命令存在“星号变量”,其中星号附加到命令名称。
re.findall
时,似乎r'\\([a-zA-Z]+)(\*)?'
是正确的正则表达式... - mgilson@
是一个字母,但这是一种情况,你不能在文件的更大上下文中捕获,即不能通过正则表达式合理地捕获。 - Ulrich Schwarz\abstract*[alpha]{beta}
实际上是带有三个参数的\abstract
命令,分别是星号本身、可选的第二个参数和用大括号括起来的普通参数。因此,如果第一个参数是星号而不是其他字符,为什么要对其进行特殊处理呢? - Luis Colorado