加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用正则表达式将excel公式转换为wolfram mathematica

发布时间:2020-12-14 05:59:58 所属栏目:百科 来源:网络整理
导读:我正在导入Excel文件并提取这些文件中的公式,以便使用Excel无法执行的各种测试和计算.但是,要做到这一点,我需要将Excels函数转换为Mathematica可以使用的函数.所有这些公式都非常大(平均200页),因此手动转换不是一种选择.这让我想到了当前的问题. 我需要转换
我正在导入Excel文件并提取这些文件中的公式,以便使用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,"B"]="A",D8]*2/IF[G17*G2=G1,IF[EXP[K9]=K10,K12]]*EXP[IF[(H22+H23)=213,B1]]

有没有可以匹配这些情况的正则表达式?

解决方法

string = "IF(IF((A2+B2)*(C1+2^D1)<>7,"A","B")="A",D8)*2/IF(
G17*G2=G1,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

06003

ToExpression @ %

enter image description here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读