需要正则表达式来检测简单的数学表达式

时间:2010-10-07 16:47:30

标签: c# .net regex

我将验证简单的数学表达式,如:

a = 1 + 2
b = 2.2
a = b + 5.5
a = b - -5.5
a = -1 + 2
a = -2.4
a = 3.5 / 0.2 + 1
a = 3 * -2.1

注意:运算符优先级并不重要!

我尝试按照表达式但我什么也没得到!

for digits: ^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$
for operators: [-]|[+]|[*]|[/]
for variables: [a-z]+|[A-Z]+

我将这些表达式放在C#字符串变量中,并使用.net Regex.Matches(...)来查找匹配项。但我一无所获!

3 个答案:

答案 0 :(得分:3)

这对正则表达式来说不是一个好工作。如果你想评估真正的数学表达式,你将无法想出能够处理所有情况的正则表达式。正如卡尔·诺鲁姆所说,这是一个类似的讨论,为什么你不能解析html with regex

答案 1 :(得分:1)

尝试:

for digits: ((-[0-9]|[0-9])(\.[0-9])|[0-9])
for operators: (-|\+|\*|\/)
for variables: ([a-z]|[A-Z])

在Regulator中测试时看起来很好。

修改

第一个可能有点'草率',我用完午餐时间就乱了:P

答案 2 :(得分:0)

为简单事物编写好的正则表达式比看起来更难。从经过验证的表达式开始,并根据需要进行修改:

http://regexlib.com

如果你找不到一个例子,他们就有一个专门讨论这类问题的论坛。