使用正则表达式仅从C#中的多项式方程中提取系数?

时间:2018-07-26 18:17:13

标签: c# regex

String p = "f(x) = 0.0000001122*x^5 - 0.0000184003*x^4 + 0.0009611014*x^3 - 0.0179035548*x^2 - 0.7956585082*x + 79.9900932407";

String expr1 = p.ToString().Replace(" ", "");
var results = Regex.Matches(expr1, @"[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?").Cast<Match>().Select(m => m.Value).ToList();
Console.WriteLine(results[9]);

我能够提取方程式的系数,但是输出中还包含x的幂,这是我不想要的。 有人可以帮我吗? 我对正则表达式不太熟悉。

谢谢。

3 个答案:

答案 0 :(得分:0)

只要系数是仅用数字表示的数字,就可以尝试使用Rational myRational = new Rational(); // TODO: remove

  • var results = Regex.Matches(expr1, @"\d+\.?\d+").Cast<Match>().Select(m => m.Value).ToList();匹配一个或多个数字
  • \d+匹配0或1“。”

答案 1 :(得分:0)

通过正则表达式可能很困难;使用Linq会更容易:取每两个系数,就可以得到想要的结果:

Regex.Matches(expr1, @"[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?").Cast<Match>().Select(m => m.Value).Where ((x,i) => i%2==0).ToList();

它使用indexed version of Where

答案 2 :(得分:0)

尝试

        String p = "f(x) = 0.0000001122*x^5 - 0.0000184003*x^4 + 0.0009611014*x^3 - 0.0179035548*x^2 - 0.7956585082*x + 79.9900932407";
        String expr1 = p.ToString().Replace(" ", "");
        var results = Regex.Matches(expr1, @"(?<coe>[-+]?[0-9]*\.[0-9]+)").Cast<Match>().Select(m => m.Groups["coe"].Value).ToList();
        foreach (var result in results)
        {
            Console.WriteLine($"{result}");
        }
        Console.Read();

结果:

0.0000001122
-0.0000184003
+0.0009611014
-0.0179035548
-0.7956585082
+79.9900932407