2013-10-03 31 views
0

我是使用正则表达式的新手,并且在解析字符串时遇到问题。我正在使用正则表达式解析作为字符串给出的公式。C#拆分公式的字符串表示形式

目前我正则表达式是:

string[] formula_substrings = Regex.Split(formula, "(\\()|(\\))|(-)|(\\+)|(\\*)|(/)|(\\s+)") 

一个测试用例,这正则表达式是无法处理是当公式的指数。

例子:

Formula = "1e-2 + 5.0" 

我期望的输出是

["1e-2", "+", "5.0"] 

但我正在逐渐

["1e", "-", "2", "+", "5.0"]. 

我试图改变正则表达式,以确保字符的前面减号:不是e:

string[] formula_substrings = Regex.Split(formula, "(\\()|(\\))|((^e)-)|(\\+)|(\\*)|(/)|(\\s+)") 

,这是造成问题时,表达的是

Formula = "5+5-2" 

它会给输出:

["5", "+", "5-2"] 

当我需要的输出是

["5", "+", "5", "-", "2"] 

预先感谢帮助!

+0

也了解贪婪(*)和非贪婪(*?) –

回答

3

您可以使用回顾后..

Regex.Split(formula, @"(\(|\)|(?<!e|E)-|(?<!e|E)\+|\*|/|\s+)") 
           -------- --------