问题的提出
根据用户给定表达式,里面含有各种数学函数,如求绝对值,三角函数,平方、开方等,分别以类似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;
}