2010-01-27 138 views
3

简单的regex在我的LaTeX文件,我有数以千计下面的结构的出现:极品乳胶

$\displaystyle{...math goes here...}$ 

我想和

\mymath{...math goes here...} 

注取代这些的$消失了,但大括号仍然存在---如果不是最后的$,这将是一个基本的查找和替换。如果只有我知道任何正则表达式,我相信它会处理这个没有问题。我需要做什么正则表达式?

非常感谢提前。

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

  1. 是,$\displaystyle{ ... }$可以在同一行中多次出现。
  2. 否,嵌套}$的(如$\displaystyle{...{more math}$...}$)不能出现。我的意思是,如果你把它放在\mbox之类的东西里,我想它可能会出现,但我无法想象为什么有人会在$\displaystlye{}$这个结构里面做到这一点,其目的是用文本内联数学运算。无论如何,这不是我曾经做过或可能做的事情。
  3. 我尝试使用Perl的建议,但虽然壳没有提出异议,文件保持不受影响。我试过使用sed建议,但是shell反对'(''。'我以前从来没有用过sed(和“man sed”是钝的),但这里是我所做的:导航到含.tex文件里和一个目录下键入“sed s/\$\\displaystyle({[^}]+})\$/\\mymath\1/g *.tex”没有运气如何使用SED做我想做什么

同样,许多许多感谢所有提供帮助

+0

我认为你可以明确一个限制,让每个人的工作变得更简单:数学部分内部不会有$,因为这将表明LaTeX中数学模式的结束(更准确地说没有未转义的$,即\ $是允许的,但我怀疑你会有太多的数学公式与美元符号)。 – Aniko 2010-01-27 15:41:59

+0

你是对的。数学模式没有$(对我来说,无论如何)。 – 2010-01-27 16:00:33

+0

不是直接编辑文件,而只是为了看看结果是什么,你可以使用perl -pe而不是perl -pi -e。确保没有错字。 – bertolami 2010-01-28 08:09:52

回答

4

sed的:。?。

s/\$\\displaystyle({[^}]+})\$/\\mymath\1/g 
1
perl -pi -e 's/$\\displaystyle({.*)}\$/\\mymath$1}/g' *.tex 

如果倍数} $是在同一行,你需要一个非贪婪版本:

perl -pi -e 's/$\\displaystyle({.*?)}\$/\\mymath$1}/g' *.tex 
+0

不需要'{'需要在Perl中转义?由于'。*'贪婪,它匹配'$ \ displaystyle {'和'} $'的最后一个匹配项:你确定这是正确的吗?以'... $ \ displaystyle {foo} $ ... $ \ displaystyle {bar} $ ...'为例。 – 2010-01-27 14:37:32

+0

在正则表达式中似乎没有必要。尝试了上面的表达并且工作。 – bertolami 2010-01-27 14:38:29

+0

啊,好的。我并不十分熟悉Perl,在大多数我认识的正则表达式实现中,他们确实需要转义。谢谢(你的)信息。 – 2010-01-27 14:40:49

4

使用正则表达式,因为理论上的答案是做这种类型的替代 的时候要非常小心, 正则表达式是无法匹配的这种类型的模式。

REGEX是一个有限状态机;它不包含下推堆栈,所以 它不能与嵌套结构一起工作,如“{... math goes here ...}”,如果 有任何嵌套的可能性,例如“{more math} $” 可以作为“数学走到这里”字符串的一部分出现。您至少需要一个 上下文无关语法来描述这种类型的构造 - 一个状态机 只是不会削减它!

现在话说回来,你仍然可以拉动这一关使用正则表达式 提供您的无“数学放在这里”的字符串比 什么一个状态机可以处理更复杂。

给它一个镜头....但要小心结果!

+0

尽管这些正则表达式很难构建,但你可以考虑固定数量的嵌套'{...}'。考虑2个嵌套括号甚至让我头晕目眩!还要注意一些正则表达式引擎(.NET,PHP和Perl)有能力匹配他们自己的模式,或者匹配他们自己的模式(*可以*处理递归)。大多数正则表达式实现在数学/严格意义上不能称为“规则”。尽管如此,在这种情况下使用正则表达式可能不是这里最好的选择! +1 – 2010-01-27 15:05:14

+0

@NealB;)你的电脑也是一台状态机,不是吗?我不同意正则表达式不是一个好的选择。在我看来,这是一个非常合理的选择,可以匹配99%的案例。分析整个东西的努力可能远高于修复其余的1% – bertolami 2010-01-27 15:06:01

+0

请注意,亚历克斯有“成千上万”这些东西要取代。在这种情况下,只有1%的* do *嵌套'{...}'可能是底部的痛苦! :) – 2010-01-27 15:16:26