现在用的是这个
if (Regex.IsMatch(AddBar.Text, @"[0-9]+")但容易把无加减乘除的纯数字,比如133331也判断成算式。更完备的正则表达式应该怎么写?

解决方案 »

  1.   


    string str = Console.ReadLine();
    string pat = @"^((0|[1-9]\d*)[-+*/](0|[1-9]?\d*))+$";
    Regex regex = new Regex(pat);
    while (str.ToUpper().CompareTo("G")!=0)
    {
        Console.WriteLine(regex.IsMatch(str).ToString());
        str = Console.ReadLine();
    }
      

  2.   

    楼上的不能判断小数的试试这个 
    ^[\+\-]?\d+(\.\d+)?([\+\-\*\/]\d+(\.\d+)?)*$
      

  3.   

    Regex   regex   =   new   Regex(@"   
      ^                                               (?#匹配开头)   
      [-+]?                                       (?#开头可以出现正负号)   
      ([0-9]+(\.[0-9]+)?[-+*/])*           (?#可选数-符号-数-符号-……-数-符号或结尾)   
      (   
              (   
                      (?<o>\()                 (?#左括号,保存到o名字下)   
                      [-+]?                       (?#可选正负号)   
                      ([0-9]+(\.[0-9]+)?[-+*/])*   (?#可选数-符-数-符……)   
              )+                                     (?#可以重复出现左括号)   
              [0-9]+(\.[0-9]+)?                             (?#左右括号之间最起码需要一个操作数)   
              (                                       (?#)   
                      (?<-o>\))               (?#右括号,匹配的同时去掉一个左括号)   
                      ([-+*/][0-9]+(\.[0-9]+)?)*   (?#可选符-数-符-数……)   
              )+                                     (?#可以重复出现右括号,仅当还有左括号剩余)   
              ($|[-+*/])                     (?#要么结尾,要么在下一个左括号出现之前出现一个运算符)   
      )*                                             (?#重复出现左括号)   
      (?(o)(?!))                             (?#如果还有左括号剩余就不匹配任何东西)   
      $                                               (?#匹配结尾)   
      ",   RegexOptions.IgnorePatternWhitespace); 
      

  4.   

    ^[-+]?([0-9]+(\.[0-9]+)?($|[-+*/]))*(((?<o>\()[-+]?([0-9]+(\.[0-9]+)?[-+*/])*)+[0-9]+(\.[0-9]+)?((?<-o>\))([-+*/][0-9]+(\.[0-9]+)?)*)+($|[-+*/]))*(?(o)(?!))$
      

  5.   

    这个可以吧:^[\+\-]?\d+(\.\d+)?([\+\-\*\/]\d+(\.\d+)?)*$
      

  6.   


                string input = Console.ReadLine();
                try
                {
                    object o = new DataTable().Compute(input, "");
                    Console.WriteLine(o == null ? "不是算式" : o.ToString());
                }
                catch
                {
                    Console.WriteLine("不是算式");
                }
      

  7.   


    ^[\+\-]?\d+(\.\d+)?([\+\-\*\/]\d+(\.\d+)?)+$
    这个!
      

  8.   

    ^\(+-]?\[?\s{0,3}\(?\s{0,3}\d+(\.?\d+)?\)?\s{0,3}\]?\s{0,3}([+-/*×÷+-]\[?\s{0,3}\(?\s{0,3}\(?\s{0,3}\d+(\.\d+)?\)?\s{0,3}\]?\s{0,3})+[==≈]?(\(\s*\))?$
    可以判断加减乘除带中括号,小括号和等号的算式。
      

  9.   

    int i = 0, j = 0;
                int b = 0, e = 0;
                while (i > -1)
                {
                    i = strTemp.IndexOf("(", i + 1);
                    if (i > -1)
                        b++;
                }
                while (j > -1)
                {
                    j = strTemp.IndexOf(")", j + 1);
                    if (j > -1)
                        e++;
                }
                if (b != e || (b == 0 && e == 0))
                    return false;
                strTemp = strTemp.Replace("(", " ");
                strTemp = strTemp.Replace(")", " ");
                Regex reg = new Regex(@"\{\d+?\}([+\-*/]\{\d+?\})*?");
                return reg.IsMatch(strTemp);试下以上。