gpt4 book ai didi

c# - 查找并替换方程式(正则表达式?)

转载 作者:行者123 更新时间:2023-11-30 17:21:30 24 4
gpt4 key购买 nike

我正在将一些 excel 公式转换到另一个系统,需要进行一些相当巧妙的搜索和替换魔术。我认为 Regex 是在这种情况下完成这项工作的工具,但如果有人有任何其他想法,我想听听他们的意见。

我正在努力将这些公式转化为类似于 SQL 语法的东西。我还必须处理代数符号,所以我可能有以下内容:

9^2 需要变成 POWER(9,2)。(A + 3)^3 需要变成 POWER((A+3),3)。

最好的方法是什么?

如果有不同,我正在使用 C# 3.5。

编辑:我必须解析的示例(电源符号接近尾部):

"((({VAL(9286)} / 1000) * {VAL(4648)}) + (({VAL(9609)} / 1000) + ({VAL(6480)} / 1000)) * {VAL(8574)}) / ({VAL(9286)} / 1000 + {VAL(9609)} / 1000 + {VAL(6480)} / 1000) * (({VAL(9286)} / 22.4)*34.38 + {VAL(9609)} + {VAL(6480)}) * ((1.075068 + 0.001*11.17019 * ((({VAL(9286)} / 1000) * {VAL(4648)}) + (({VAL(9609)} / 1000) + ({VAL(6480)} / 1000)) * {VAL(8574)}) / ({VAL(9286)} / 1000 + {VAL(9609)} / 1000 + {VAL(6480)} / 1000)+273.15)) + (100000*0.90755 / ((({VAL(9286)} / 1000) * {VAL(4648)}) + (({VAL(9609)} / 1000) + ({VAL(6480)} / 1000)) * {VAL(8574)}) / ({VAL(9286)} / 1000 + {VAL(9609)} / 1000 + {VAL(6480)} / 1000) + 273.15)^2))*4.1868/32)"

最佳答案

由于嵌套括号的可能性,正则表达式不是完成此任务的合适工具。最好使用数学表达式解析器。

但这并非不可能。例如,通过反复替换模式

((?=[\w.(])[\w.]*\s*(?:\((?>[^()]+|\((?<O1>)|\)(?<-O1>))*(?(O1)(?!))\))?)\s*\^\s*((?=[\w.(])[\w.]*\s*(?:\((?>[^()]+|\((?<O2>)|\)(?<-O2>))*(?(O2)(?!))\))?)

"POWER($1,$2)"

直到字符串不发生变化,应该可以转所有a^b进入POWER(a,b) .示例:

   (a+3)^(b+5^(c+3)) + 9 ^ 2 + (A + 3)^3 + (5^7)^(6^(8^9-1)-3)
-> POWER((a+3),(b+5^(c+3))) + POWER(9 ,2 )+ POWER((A + 3),3 )+ POWER((5^7),(6^(8^9-1)-3))
-> POWER((a+3),(b+POWER(5,(c+3)))) + POWER(9 ,2 )+ POWER((A + 3),3 )+ POWER((POWER(5,7)),(POWER(6,(8^9-1))-3))
-> POWER((a+3),(b+POWER(5,(c+3)))) + POWER(9 ,2 )+ POWER((A + 3),3 )+ POWER((POWER(5,7)),(POWER(6,(POWER(8,9)-1))-3))
-> done

请注意,此正则表达式将采用 ^是左结合而不是右结合。

   1^2^3
-> POWER(1,2)^3
-> POWER(POWER(1,2),3)
-> done

虽然 1^2^3 本身不是良构的。

关于c# - 查找并替换方程式(正则表达式?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3386812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com