使用正则expression式将excel公式转换成wolfram mathematica

我正在导入Excel文件,并提取这些文件中的公式来执行各种testing和计算,Excel无法执行。 但是,要做到这一点,我需要将Excels函数转换为Mathematica可以使用的函数。 所有这些公式都非常大(平均超过200页),所以手动转换不是一个选项。 这使我目前的问题。 一些我需要转换的公式包含Excel函数中的括号,导致如下情况:

IF(IF((A2+B2)*(C1+2^D1)<>7,"A","B")="A",C8,D8)*2/IF(G17*G2=G1,IF(EXP(K9)=K10,K11,K12))*EXP(IF(H22+H23=213,A1,B1)) 

在这里,我需要将所有的()从IF和EXP函数转换为[],而不用像(A2 + B2)那样改变零件。 目标是将其转换为:

 IF[IF[(A2+B2)*(C1+2^D1)<>7,"A","B"]="A",C8,D8]*2/IF[G17*G2=G1,IF[EXP[K9]=K10,K11,K12]]*EXP[IF[(H22+H23)=213,A1,B1]] 

有一个正则expression式可以匹配这些情况吗?

 string = "IF(IF((A2+B2)*(C1+2^D1)<>7,\"A\",\"B\")=\"A\",C8,D8)*2/IF(\ G17*G2=G1,IF(EXP(K9)=K10,K11,K12))*EXP(IF(H22+H23=213,A1,B1))" 

那这个呢:

 ClearAll@rectBrackets; rectBrackets := StringReplace[ #, (f_?UpperCaseQ ~~ fr : LetterCharacter ..) ~~ "(" ~~ Shortest[content__] ~~ ")" /; ( StringCount[content, ")"] == StringCount[content, "("] ) :> ( f <> ToLowerCase[fr] <> "[" <> rectBrackets @ content <> "]" ) ] &; operators = StringReplace[#, {"=" -> "==", "<>" -> "!="}] &; 

现在让我们使用它们:

 rectBrackets @ operators @ string 
 "If[If[(A2+B2)*(C1+2^D1)!=7,\"A\",\"B\"]==\"A\",C8,D8]*2/If[G17*\ G2==G1,If[Exp[K9]==K10,K11,K12]]*Exp[If[H22+H23==213,A1,B1]]" 
  ToExpression @ % 

在这里输入图像说明