本帖最后由 huyou1983218 于 2010-12-03 20:52:54 编辑

解决方案 »

  1.   


     ^\s*[-+]?(((([0-9]\,?[0-9]*)+\.?[0-9]*))+(\s*$|\s*([-+*/]+?|[<>!=]+)\s*))*(((?<o>\()\s*[-+]?(((([0-9]\,?[0-9]*)+\.?[0-9]*))+\s*([-+*/]+?|[<>!=]+)\s*)*)+((([0-9]\,?[0-9]*)+\.?[0-9]*))(\s*(?<-o>\))(\s*([-+*/]+?|[<>!=]+)\s*((([0-9]\,?[0-9]*)+\.?[0-9]*))+)*)+(\s*$|\s*([-+*/]+?|[<>!=]+)\s*))*(?(o)(?!))(?<=[0-9)]\s*)\s*$现在可以这样了(1.2-(3.4+3)/2-4.1*1.2)谁能帮忙替换成1楼的格式
      

  2.   

    试试这个。你的例子都能捕获,对表达式规则没仔细验证,比如00,++都没做判断。
    \b(?:(?<o>\()|(?<-o>\))|[a-zA-Z0-9_+\-*/.]+)+(?(o)(?!))
      

  3.   

    1.2-(未报送+3)/2-4.1*1.2 这个也能通过,带中文的不能通过,G0100_0910_D01000690D57+G0100_0910_D01000690D57*2+(G0100_0910_D01000690D57-G0100_0910_D01000690D53)
    最重要的是这样的公式能捕获
      

  4.   

    \b(?:(?<o>\()|(?<-o>\))|(?<!\))[a-zA-Z0-9_.]+|(?<![+\-*/])[+\-*/])+(?(o)(?!))你贴的都可以通过。
      

  5.   

    G0100_0910_D01000690D57+G0100_0910_D01000690D57*未报送2(G0100_0910_D01000690D57-G0100_0910_D01000690D53) 这样也通过了,不能出现中文
      

  6.   


    没有吧,8楼贴的,会产生2次结果
    G0100_0910_D01000690D57+G0100_0910_D01000690D57*
    (G0100_0910_D01000690D57-G0100_0910_D01000690D53)试试这样^(?!.*?[+\-*/]\s*$)(?=[()a-zA-Z0-9_.+\-*/]+$)\s*(?:(?<o>\()|(?<-o>\))|(?<!\))[a-zA-Z0-9_.]+|(?<![+\-*/])[+\-*/])+(?(o)(?!))\s*$
      

  7.   

    er...
    不满足的例子你可以继续贴。
    平衡组确定()的成对出现
    [a-zA-Z0-9_.]限定了表达式变量的有效字符
    [+\-*/]定义了符号
    最前面用环视确定符号不是最后一个有效字符,避免缺失操作数的可能
    (?=[()a-zA-Z0-9_.+\-*/]+$) 限定了允许出现的符号列表虽然没有按你那种复杂的写法来写,但这已经是描述出了你实际需求的,正则语法是以方面,但规则总结可能会导致表达式不同的。还有不符合的情况贴一下?
      

  8.   

    我的意思是公式项要符合G0100_0910_D01000690D57 这样的格式,公式项也可以是数字。所以我感觉正则不能完全实现。
      

  9.   

    G0100_0910_D01000690D57 这样的格式
    这是什么格式?
    哪些是固定的?G?还是大写字母开头?你说明格式,这个问题正则有解。
      

  10.   

    格式就GF 或 SF 或G 或S 然后_然后 4位数字例如0910在_然后后面就有可能是中文的有可能是D01000690D57这样的,就这种格式。