?????????·?????????????????????з???????????з??????????????($)????????????????????????????????????????????????????????????滻???????????

??????????????????????????????????????????????????????????Σ???п???????????Σ???п?????????????????????????……??????′???????Щ????????????????????

?????????????????????????????

???????????????????

??????????????????????????????????????????????????????????????????????????滻????е??????????????????????????(Pattern)??

????3.1 ????????

????????????????????????($B'1????????'+10-$G'??????????'+$J'N-213????')*5?????У???????????????????????????????????

????$[B|G|J]'.+'

???????У?$ ???????????????????$??????????е????????????壻[B|G|J]???B??G??J????????.+???????????????????

??????????????????????е????????????????飬?????????????VS 2012???????????? ???????????????????????????????????????????????????????????棺????????????????????

????$([B|G|J])'(.+)'

???????????????????????????ε????????????????????乫????????????????????????Σ??????????????????????????????

????$B'1????????'

????$G'??????????'

????$J'N-213????'

???????????????????Σ???????????????

????$B'1????????'+10-$G'??????????'+$J'N-213????'

???????У?$([B|G|J]) ??? “$B”????????????? (.+) ??? “1????????'+10-$G'??????????'+$J'N-213????”???????????????????????????????????????????????跨????????????????????????????????м?????????????

????$([B|G|J])'(.+?)'

????3.2 ?????????

???????????????????????????£?

  
    private const string FormulaItemPattern = @"$([B|G|J])'(.+?)'";
 
    private double EvaluateFormula(string formula)
    {
        foreach (Match match in new Regex(FormulaItemPattern).Matches(formula))
        {
            var item = match.Groups[0].ToString();
            var type = match.Groups[1].ToString();
            var name = match.Groups[2].ToString();

            switch (type.ToLower())
            {
                case "b":
                    formula = formula.Replace(item?? GetMeterValue(name));
                    break;
                case "g":
                    formula = formula.Replace(item?? GetTankValue(name));
                    break;
                case "j":
                    formula = formula.Replace(item?? GetNodeValue(name));
                    break;
            }
        }

        return EvaluateExpression(formula);
    }