在LaTeX命令中提取参数的正则表达式



我有一个大型的LaTeX文档,在其中我定义了一个宏,如下所示:

newcommand{abs}[1]{left|#1right|}

我想通过将所有文档中的abs{...}替换为left|...right|来消除它,所以我使用正则表达式进行思考。我熟悉它们的基本原理,但我不知道如何找到关闭表达式的括号,因为以下情况是可能的:

  1. abs{(2+x)^3}
  2. abs{frac{2}{3}}
  3. abs{frac{2}{sin(2abs{x})}}

我目前能够做的是\abs{([^}]*)},然后替换为left1right|,但它只能处理第一类代码。

顺便说一下,我使用的是TeXstudio正则表达式引擎。

好吧,我做了更多的研究,并设法解决了它。根据类似问题中的回答,使用递归正则表达式和支持它们的文本编辑器就足够了,例如Sublime text 2(我无法使用TeXstudio)。这就成功了:

查找:\abs{(([^{}]|(?R))*)}

替换:\left|1\right|

第1版:实际上,这只解决了前两种情况,但在第三种情况下失败了,所以任何关于如何改进正则表达式的想法都将不胜感激。

编辑2:请参阅@CasimiretHippolyte的评论,了解使用\abs{((?>[^{}]+|{(?1)})*)} 的完整答案

最新更新