1. 程式人生 > >C#正則表示式的完全匹配、部分匹配及忽略大小寫的問題

C#正則表示式的完全匹配、部分匹配及忽略大小寫的問題

問題的提出

根據使用者給定表示式,裡面含有各種數學函式,如求絕對值,三角函式,平方、開方等,分別以類似ABS(表示式),Sin(表示式),ASin(表示式),POW(表示式)等形式表述。

由於使用者輸入的可能是不區分大小寫,而且可能用Sin,Asin,Tan,Tanh等(具體見下面程式碼中所述的函式),因此,要求解決完全匹配和部分匹配的問題,還要解決忽略大小寫的問題。

將使用者的函式前加“Math.”,後跟函式名稱及括號等。

實現如下:

//用於數學計算的函式
        List<string> listMathFunctions = new List<string>(new string[]{
            "Abs", "Acos", "Cos","Asin", "Atan", "Atan2", "Ceiling",  "Cosh", "Exp", "Floor", "Log", "Log10", 
            "Max", "Min", "PI", "Pow", "Round", "Sign", "Sin", "Sinh", "Sqrt", "Tan", "Tanh", "Truncate"});

        public string MatchReplaceMathFunctions(string expr)

        {
            foreach (string mathFun in listMathFunctions)
            {
                expr = Regex.Replace(expr, @"[^<>=Math\.]" + mathFun + @"\s*\(", " Math." + mathFun + "(", RegexOptions.IgnoreCase | RegexOptions.RightToLeft);
            }
            return expr;
        }