有这样一个字符串。
3+4+2+abs(3+4)+3+4+2+sin(2+2)+4-3-abs(3+5)+7-3-2+4+sin(2+3)这里我需要把所有的abs(),sin()括号中的内容分别 取出来然后计算好后替换回去。高手帮帮忙。谢谢。有源代码最好。没分了

解决方案 »

  1.   

    已经做出来了不过感觉效率不高            Regex regex = new Regex(@"(ABS|SIN|COS|SQR|TAN|LOG){1}(\(){1}[^\)]*\){1}");
                string ff = "3+4+2+abs(3+4)+3+4+2+sin(2+2)+4-3-abs(3+5)+7-3-2+4+sin(2+3)";
                MatchCollection matches = regex.Matches(ff);
                string str = "";
                string ee = ff;
                foreach (Match m in matches)
                {
                    str = m.Value;
                    double a = 0;
                    switch (str.Substring(0, 3))
                    {
                        case "ABS":a= Math.Abs(Double.Parse(jis(str.Substring(4, str.IndexOf(")") - 4))));
                            break;
                        case "SIN": a = Math.Sin(Double.Parse(jis(str.Substring(4, str.IndexOf(")") - 4))));
                            break;
                        case "COS": a = Math.Cos(Double.Parse(jis(str.Substring(4, str.IndexOf(")") - 4))));
                            break;
                        case "SQR": a = Math.Sqrt(Double.Parse(jis(str.Substring(4, str.IndexOf(")") - 4))));
                            break;
                        case "TAN": a = Math.Tan(Double.Parse(jis(str.Substring(4, str.IndexOf(")") - 4))));
                            break;
                        case "LOG": a = Math.Log(Double.Parse(jis(str.Substring(4, str.IndexOf(")") - 4))));
                            break;
                    }
                   ee= ee.Replace(str, a.ToString());
                
                }
                MessageBox.Show(ee);