想定义两个函数,sumd和sumc,并且支持加减法。比如:
sumd(a)
sumd(a)+sumd(c)
sumd(a)+sumd(c)-sumc(b)
等Regex.IsMatch(txtExpress, @"^(sum(c|d)\(\w+\))((\+|-)sum(c|d)\(\w+\))*?$")这样似乎是没有问题,但当需要处理多行的时候,就有问题了,
Regex.IsMatch(txtExpress.Text, @"^(sum(c|d)\(\w+\))((\+|-)sum(c|d)\(\w+\))*?$",RegexOptions.Multiline)只会判断最后一行是否符合,比如
"...\r\n...\r\nsumd(1)+sumc(1)-sumc(1)"
就返回true,请问应该怎么判断整个公式是否符合呢?

解决方案 »

  1.   

    没太明白的说,你现在是什么问题,用这个的时候
    Regex.IsMatch(txtExpress.Text, @"^(sum(c|d)\(\w+\))((\+|-)sum(c|d)\(\w+\))*?$",RegexOptions.Multiline)
    对于多行,你给个具体的例子吧,然后说下你是想让它返回true还是false,说下你现在的做法哪里有问题了
      

  2.   

    我希望这样写时为true,
    -----------------
    sumd(a)
    +sumd(c)
    -sumc(b)
    -----------------希望这样写为false(但我的写法会判为true)
    -----------------
    abcdefg
    sumc(a)
    +sumd(c)
    -----------------
      

  3.   

    按你现在的这个例子,在你的基础上改了一下Regex.IsMatch(yourStr, @"^(sum(c|d)\(\w+\))(\s*(\+|-)sum(c|d)\(\w+\))*?$")这种要求不能用RegexOptions.Multiline参数
      

  4.   

    按照 过客 博客的说法:在CSDN搜"正则表达式",然后一个一个回答这个是我写的Regex.IsMatch(yourStr, @"(([\+\-]*)*sum[dc]\(\w+\)\1*)+")匹配:
    sumd(a)
    +sumd(c)
    -sumc(b)
    或者:
    sumd(a)
    sumd(a)+sumd(c)
    sumd(a)+sumd(c)-sumc(b)