需要LaTeX的简单正则表达式

Ale*_*son 3 regex latex

在我的LaTeX文件中,实际上有数千个以下结构出现:

$\displaystyle{...math goes here...}$
Run Code Online (Sandbox Code Playgroud)

我想用替换

\mymath{...math goes here...}
Run Code Online (Sandbox Code Playgroud)

请注意,$消失了,但是花括号仍然保留---如果不是尾随的$,这将是基本的查找和替换。如果我只知道任何正则表达式,我相信它会毫无问题地解决这个问题。我需要做些什么正则表达式?

提前谢谢了。

编辑:出现了一些问题,所以让我澄清一下:

  1. 是的,$\displaystyle{ ... }$可以在同一行上多次出现。
  2. 否,不能出现嵌套}$的(如$\displaystyle{...{more math}$...}$)。我的意思是,我想如果您将它放在\mbox或之类的东西中也是可以的,但是我无法想象为什么有人会在$\displaystlye{}$构造体中这样做,其目的是在文本内联显示数学。无论如何,这不是我曾经做过或可能要做的事情。
  3. 我尝试使用perl建议,但是尽管shell没有提出异议,但文件仍然不受影响。
  4. 我尝试使用sed建议,但是shell反对“('”附近的“意外令牌”。我以前从未使用过sed(并且“ man sed”很钝),但这是我做的:导航到包含以下内容的目录.tex文件,然后键入“ sed s/\$\\displaystyle({[^}]+})\$/\\mymath\1/g *.tex”。不走运。如何使用sed执行我想要的操作?

再次感谢所有提供的帮助。

Nea*_*alB 5

使用REGEX进行这种类型的替换时要非常小心,因为理论上的答案是REGEX无法匹配这种类型的模式。

REGEX是一个有限状态机。它没有合并下推堆栈,因此如果有嵌套的可能性,例如“ {more math} $”这样的嵌套结构,则它不能与“ {... math go here ...}”之类的嵌套结构一起使用“数学在这里”字符串的一部分。您至少需要一个上下文无关的语法来描述这种类型的构造-状态机不会削减它!

话虽如此,但只要您的“精打细算”中的任何一个都不比状态机可以处理的字符串复杂,您仍然可以使用REGEX实现这一目标。

试一试...。但是要小心结果!