Regex 读取字符串的内圆括号(VB.NET)
我正在用visualbasic开发一个计算器函数。我认为默认的.NET库中没有基本的 我使用Regex 读取字符串的内圆括号(VB.NET),regex,vb.net,string,parentheses,Regex,Vb.net,String,Parentheses,我正在用visualbasic开发一个计算器函数。我认为默认的.NET库中没有基本的 我使用System.Data.DataTable.Compute()来计算正常的数学表达式。但我希望我的函数也能解像Sinus()或Round()这样的函数 目前我正在为此使用正则表达式。例如,对于我使用的带有一个参数的函数 Dim expr As String=Regex.Replace(术语“(?[A-Za-z]*?)\((?[0-9,.]*?)\”,FunctionLibrary.Funcs1的地址) S
System.Data.DataTable.Compute()
来计算正常的数学表达式。但我希望我的函数也能解像Sinus()或Round()这样的函数
目前我正在为此使用正则表达式。例如,对于我使用的带有一个参数的函数
Dim expr As String=Regex.Replace(术语“(?[A-Za-z]*?)\((?[0-9,.]*?)\”,FunctionLibrary.Funcs1的地址)
Sinus()函数如下所示:sin(Number)
但这只允许在参数中写入双精度或整数。我无法编写内部函数,甚至无法在括号之间编写另一个数学表达式
如果我将编写更多函数作为参数,正则表达式将检测函数内部的第一个“)”作为外部函数的结尾,这是内部函数的右括号
有没有办法让正则表达式认识到还有一个内部函数
如果有人知道默认.NET库中Visual Basic的Evaluate()函数,这可能也会对我有所帮助
有没有办法让正则表达式认识到还有一个内部函数
不,没有。正则表达式,顾名思义,解决语法和简单的数学表达式是非常重要的。正则表达式没有与任意表达式匹配的堆栈。例如,区分(())
和(()
至少需要一个前视(或回溯)字符。是的,PCRE样式的正则表达式可以让您创建固定数量的先行字符,但据我所知,您必须指定字符数,无论如何,这不会解决您的问题
计算算术表达式需要处理优先级、子表达式、可能的变量和类型。正则表达式无法做到这一点,尝试使用正则表达式将导致失败
甚至没有必要。计算数学表达式是一个已解决的问题,有几十个解析器和求值器已编写、测试并准备好让您投入到应用程序中。你没有给我们足够的信息来决定哪一个最适合你,而且不管怎样,Stack Overflow不是一个工具宣传网站。你可以在Gary Beene的评论中浏览列表