我从RegexLibrary找到了以下模式,但我不知道如何使用Match来获得Re和Im值。我是Regex的新手。这是从模式中获取数据的正确方法吗?
如果是真的,我需要一些示例代码!
我认为这应该是:

public static complex Parse(string s)
{
    string pattern = @"([-+]?(\d+\.?\d*|\d*\.?\d+)([Ee][-+]?[0-2]?\d{1,2})?[r]?|[-+]?((\d+\.?\d*|\d*\.?\d+)([Ee][-+]?[0-2]?\d{1,2})?)?[i]|[-+]?(\d+\.?\d*|\d*\.?\d+)([Ee][-+]?[0-2]?\d{1,2})?[r]?[-+]((\d+\.?\d*|\d*\.?\d+)([Ee][-+]?[0-2]?\d{1,2})?)?[i])";
    Match res = Regex.Match(s, pattern, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);

    // What should i do here? The complex number constructor is complex(double Re, double Im);

    // on error...
    return complex.Zero;
}


提前致谢!

最佳答案

我认为它们使正则表达式有点复杂,例如,它们包括对科学数字的支持,并且似乎其中有些错误。

请尝试使用此更简单的正则表达式。

class Program
{
    static void Main(string[] args)
    {
        // The pattern has been broken down for educational purposes
        string regexPattern =
            // Match any float, negative or positive, group it
            @"([-+]?\d+\.?\d*|[-+]?\d*\.?\d+)" +
            // ... possibly following that with whitespace
            @"\s*" +
            // ... followed by a plus
            @"\+" +
            // and possibly more whitespace:
            @"\s*" +
            // Match any other float, and save it
            @"([-+]?\d+\.?\d*|[-+]?\d*\.?\d+)" +
            // ... followed by 'i'
            @"i";
        Regex regex = new Regex(regexPattern);

        Console.WriteLine("Regex used: " + regex);

        while (true)
        {
            Console.WriteLine("Write a number: ");
            string imgNumber = Console.ReadLine();
            Match match = regex.Match(imgNumber);

            double real = double.Parse(match.Groups[1].Value, CultureInfo.InvariantCulture);
            double img = double.Parse(match.Groups[2].Value, CultureInfo.InvariantCulture);
            Console.WriteLine("RealPart={0};Imaginary part={1}", real, img);
        }
    }
}


记住要尝试了解您使用的每个正则表达式,切勿盲目使用它们。他们需要像其他任何语言一样被理解。

关于c# - 我应该如何从字符串中获取复数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3982923/

10-11 23:12