读取字符串的内部括号(VB.NET)

时间:2015-01-13 16:37:56

标签: regex vb.net string parentheses

我正在开发Visual Basic中的计算器功能。我认为默认的.NET库中没有基本的。

我使用System.Data.DataTable.Compute()来计算正常的Math表达式。但是我希望我的函数能够解决像Sinus()或Round()这样的函数。

目前我正在使用正则表达式。例如,对于带有一个参数的函数,我使用

Dim expr As String = Regex.Replace(Term, "(?<func>[A-Za-z]*?)\((?<arg1>[0-9,.]*?)\)", AddressOf FunctionLibrary.Funcs1)

Sinus()函数如下所示:sin(Number)

但这只允许在参数中写入双打或整数。我不能在括号之间写内部函数或甚至是另一个数学表达式。

如果我将更多函数作为参数写入,Regex将检测函数内部的第一个“)”,它是内部函数的右括号,作为外部函数的结尾。

有没有办法让Regex认识到这也是一个内在的功能?

如果有人知道默认.NET库中的Visual Basic的Evaluate()函数,这对我也有帮助

1 个答案:

答案 0 :(得分:1)

  

有没有办法让Regex认识到这也是一个内在的功能?

不,没有。正则表达式,顾名思义,解决Regular语法和简单数学表达式Context-Free。正则表达式没有堆栈来匹配任意表达式。例如,区分(())()()至少需要一个前瞻(或回溯)字符。是的,PCRE风格的正则表达式可以让你创建固定数量的前瞻字符,但据我所知你必须指定字符数,无论如何这不会解决你的问题。

评估算术表达式需要处理优先级,子表达式,可能的变量和类型。正则表达式不能这样做,尝试使用正则表达式会导致陷入失败。

他们甚至不需要。评估数学表达式是一个已解决的问题,并且有许多解析器和评估程序已编写,测试并准备好供您使用。您没有给我们足够的信息来决定哪一个最适合您,而且Stack Overflow也不是工具倡导网站。你可以先看一下Gary Beene的Equation Parser评论列表。