正则表达和替换

时间:2011-08-05 19:56:11

标签: regex latex replace

在Latex中,我有很多带有123订阅的数学表达式,现在,我需要将它们更改为\alpha \beta \gamma而不是123。  例如:

$E_{223}$$E_{\beta\beta\gamma}$

$E_{31}$$_{\gamma\alpha}$

但是,我也有功率指数,不应该改变,例如$E^3_{112}$应改为$E^3_{\alpha\alpha\beta}$.

有没有办法使用正则表达式来简化此任务?我知道unix和perl的一些正则表达式,但似乎不适合这个问题。

谢谢你!

4 个答案:

答案 0 :(得分:0)

我不是100%熟悉Latex,但典型的正则表达式看起来像这样:

(?<\^)#

#为1,2或3的位置。然后,在您的替换中,您将使用\alpha\beta\gamma替换匹配项。 (?<\^)是一个负面的后瞻,只是在没有^字符(您的电源指示符)前面时才会替换该数字的实例。

如果典型的正则表达式不允许,我会删除我的答案。

答案 1 :(得分:0)

我不知道你正在使用什么编辑器或正则表达式引擎,但这是我在Perl-ish正则表达式中使用的基本思想:

替换它:

(?<=\{\d*)1(?=\d*\})

有了这个:

\\alpha

我想你也想设置g标志。

不确定我是否有正确的转义语法(自从我触及Perl以来已经有一段时间了),但我想是的。

根据需要重复\ beta,\ gamma等。

答案 2 :(得分:0)

试试这些:

  • (?<!\^\d|\d{2}|\d{3}|\d{4})1替换为\alpha
  • (?<!\^\d|\d{2}|\d{3}|\d{4})2替换为\beta
  • (?<!\^\d|\d{2}|\d{3}|\d{4})3替换为\gamma

编辑:这些正则表达式确保它不会替换指数中的数字。如果你有负指数,你可能需要调整它们以检查可选的-

编辑2:@QTax指出你不能使用可变长度的lookbehinds。

  

后视的Subexp必须是固定的字符长度。                        但顶级允许不同的字符长度                        只有替代品。

参考:http://tacosw.com/latexian/help/find/regex.html

答案 3 :(得分:0)

在Perl中,您可以执行以下操作:

$text =~ s@\$\w[^${\s]*_{\K([123]+)(?=}\$)@
    local $_ = $1;
    s/1/\\alpha/g; s/2/\\beta/g; s/3/\\gamma/g;
    $_
@ge;