假设有一公式,类似A+(A+B)*c-(d+e*6)/x,我想从公式中取出其中的a,b,c,d,e等变量,除掉运算符和数字,当然公式可能不是这个样子,可能是别的形式,谢谢

解决方案 »

  1.   

                System.Text.RegularExpressions.Regex reT = new System.Text.RegularExpressions.Regex(@"((?<expression>\w+)\W*)+");
                System.Text.RegularExpressions.Match match = reT.Match("A+(A+B)*c-(d+e*6)/x");
                for (int I = 0; I < match.Groups.Count; I++)
                {
                    for(int J=0;J<match.Groups[I].Captures.Count;J++)
                    {
                        Console.WriteLine(match.Groups[I].Captures[J].Value);
                    }
                }
      

  2.   

    修正下:
                System.Text.RegularExpressions.Regex reT = new System.Text.RegularExpressions.Regex(@"((?<expression>[a-z]+)\W*)+", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                System.Text.RegularExpressions.Match match = reT.Match("A+(A+B)*c-(d+e*6)/x");
                foreach (System.Text.RegularExpressions.Capture capture in match.Groups[match.Groups.Count - 1].Captures)
                        Console.WriteLine(capture.Value);输出:
    A
    A
    B
    c
    d
    e
      

  3.   

    不好意思,没考虑纯数字及数字开头的情况,应该是:
    [a-zA-Z_]+(\w|_)+
      

  4.   

    Reger r=new Reger("\s+?");
    Match m=r.Match(@"A+(A+B)*c-(d+e*6)/x");
    while(m.Success)
    {
        RichtextBox1.AppendText(m.Value+"\r\n");
        m=m.NextMatch();
    }
      

  5.   

    Sorry,写得太快,没考虑那么多.下面的正则表达式会完善些:
                System.Text.RegularExpressions.Regex reT = 
                    new System.Text.RegularExpressions.Regex(@"((?<var>[a-z_]+((?<=[a-z_])[_\d])*)((?<![a-z_])\d|\W)*)+",
                    System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                System.Text.RegularExpressions.Match match = reT.Match("A+(Ad+B)*c-(d_7+e*6)/x");
                foreach (System.Text.RegularExpressions.Capture capture in match.Groups[match.Groups.Count - 1].Captures)
                    Console.WriteLine(capture.Value);输出:
    A
    Ad
    B
    c
    d_7
    e
    x
      

  6.   

    再修改:
                System.Text.RegularExpressions.Regex reT =
                    new System.Text.RegularExpressions.Regex(@"((?<var>[a-z_]+((?<=[a-z_])[_\d])*)((?<![a-z_])\d|\W)*)+",
                    System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                System.Text.RegularExpressions.Match match = reT.Match("A+(Ad+B)*c-(d_7+e*6)/x");
                foreach (System.Text.RegularExpressions.Capture capture in match.Groups["var"].Captures)
                    Console.WriteLine(capture.Value);