如何从字符串中提取数值?

时间:2011-11-07 09:36:07

标签: c# algorithm

我有一个像这样的矢量 Vector =“a:2.34; b:1.24; c:0.67”。如何获得 2.34,1.24,0.67 的值?我不想在这里使用任何拆分功能。我正在使用C#。

2 个答案:

答案 0 :(得分:2)

您可以使用正则表达式来执行此操作。虽然这种模式非常天真地实现,但它是一个开始。我使用了Tuple而不是Vector,但你可以自己轻松改变它。

    static readonly Regex VectorRegex = new Regex(@"a:(?<A>[0-9]+\.[0-9]+);b:(?<B>[0-9]+\.[0-9]+);c:(?<C>[0-9]+\.[0-9]+)", RegexOptions.Compiled);

    static Tuple<double, double, double> ParseVector(string input)
    {
        var m = VectorRegex.Match(input);

        if (m.Success)
        {
            double a, b, c;
            a = double.Parse(m.Groups["A"].Value, System.Globalization.NumberFormatInfo.InvariantInfo);
            b = double.Parse(m.Groups["B"].Value, System.Globalization.NumberFormatInfo.InvariantInfo);
            c = double.Parse(m.Groups["C"].Value, System.Globalization.NumberFormatInfo.InvariantInfo);
            return new Tuple<double, double, double>(a, b, c);
        }
        else
            throw new FormatException("Invalid input format");
    }

答案 1 :(得分:0)

为什么不想要分割功能?

你可以迭代向量并用strtok()分隔每个冒号(假设你使用C / C ++)。

您还可以考虑使用KV地图。