【发布时间】:2013-08-28 17:12:20
【问题描述】:
我正在尝试存在于String input 中的remove white space。我的最终目标是创建一个中缀求值器,但我在解析输入表达式时遇到了问题。
在我看来,解决这个问题的简单方法是使用Regular Expression 函数,即Regex.Replace(...)
这是我到目前为止所拥有的......
infixExp = Regex.Replace(infixExp, "\\s+", string.Empty);
string[] substrings = Regex.Split(infixExp, "(\\()|(\\))|(-)|(\\+)|(\\*)|(/)");
假设用户输入中缀表达式 (2 + 3) * 4,我希望这会将字符串分解为数组 {(, 2, +, 3, ), *, 4};但是,调试后,我得到以下输出:
infixExp = "(2+3)*7"
substrings = {"", (, 2, +, 3, ), "", *, 7}
似乎已从中缀表达式中正确删除了空格,但拆分结果字符串是不正确的。
谁能告诉我为什么?同样,如果您有任何建设性的批评或建议,请告诉我!
【问题讨论】:
-
正则表达式不适合解析嵌套结构...
-
It appears that the white space is being properly removed from the infix expression如果是这样,那你为什么要谈论删除空格? -
@leppie:对我来说,正则表达式的唯一目的似乎是对输入进行标记。嵌套结构的解析稍后会根据标记进行。如果确实如此,那么使用正则表达式进行标记应该可以工作。
-
@leppie .NET 实际上有一些非常优雅的正则表达式结构可以做到这一点。但是,OP 似乎并没有解析嵌套结构,而只是将字符串拆分为单独的标记......我认为正则表达式非常适合。
-
如果不是作业或学习目的,我会说使用NCalc
标签: c# .net regex whitespace infix-notation