我正在实现公式栏,其中可以有两个值的任何操作,如:
SUB ( DIV ( ADD (2,5), 4.5 ), AVG (3,4) )
所以我需要先调用ADD
操作作为最内部操作,然后DIV
将其调整为一小部分,然后计算AVG
和最后SUB
这些值,所以可以有任何公式用户可以放在公式栏上。
我正在尝试为此编写递归函数,但在此之前我需要正确解析它。我无法弄清楚如何为这种模式编写正则表达式。
有什么想法吗?
答案 0 :(得分:2)
如果您要做的是将表达式分解为子表达式并获取括号内的子表达式的内容 - 您不能使用正则表达式执行此操作。正则表达式无法处理括号匹配问题。
你需要设计另一种算法来做到这一点 - 基于堆栈的方法(推开括号,在右括号上弹出)可能是一种方法。
以下是与此问题相关的问题:Regular Expression to match outer brackets
但是,一旦你的表达式被分解,你可以使用正则表达式来验证/解析表达式树中的叶子表达式(没有嵌套表达式的表达式)。
编辑:虽然上面的正则表达式通常作为一种语言(如CS类中所教授的),但是库已经对语言进行了增强以实现这一点。 Perl已经做了很长时间了,看起来它也可以在.NET中使用。这是一篇解释.NET Regex实现中的Balanced Matching的文章。
http://blogs.msdn.com/b/bclteam/archive/2005/03/15/396452.aspx