在括号表达式上使用regex_replace

时间:2018-05-02 13:00:40

标签: regex c++11 wolfram-mathematica maple

Gal:一个小型的c ++程序,用于将maple输出转换为有效的mathematica输入。

问题:括号中的表达式如下例所示: sin(-1 /( - 1 + x)/ x)应该变为sin [-1 /( - 1 + x)/ x]

如您所见,应该替换sin函数本身的唯一括号。有没有办法在不触及括号内部内容的情况下使用regex_replace()?我自己无法想出来。

实际输入将是更长的表达式,文件大小可达数kb。因此需要有效的转换。

提前谢谢!

1 个答案:

答案 0 :(得分:2)

如果你有Maple输出,因为你是在Maple中生成它,那么也许你可以同时生成所需的输出。

仅通过一个简短的例子,很难让它更广泛地适用于更广泛的目标。

使用单右引号和1级eval调用是为了防止不必要的评估(例如,Maple将从sin调用中取出前导减号)。

ee := 'sin'(-1/(-1+x)/x):

lprint( eval(ee,1) );    
  sin(-1/(-1+x)/x)

ff := subsindets(eval(ee,1),specfunc(sin),u->'Sin'[op(u)]):

lprint( eval(ff,1) );                                      
  Sin[-1/(-1+x)/x]

sprintf("%a", eval(ff,1) );

           "Sin[-1/(-1+x)/x]"

或者,如果您的原始字符串是字符串而不是未评估的函数调用,

restart;

s:="sin(-1/(-1+x)/x)";

        s := "sin(-1/(-1+x)/x)"

gg:=parse(s):

lprint( eval(gg,1) );
  sin(-1/(-1+x)/x)

ff := subsindets(eval(gg,1),specfunc(sin),u->'Sin'[op(u)]):

lprint( eval(ff,1) );
  Sin[-1/(-1+x)/x]

sprintf("%a", eval(ff,1) );

          "Sin[-1/(-1+x)/x]"