C# 需要一个正则表达式来检测简单的数学表达式

C# 需要一个正则表达式来检测简单的数学表达式,c#,.net,regex,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]

我将验证以下简单的数学表达式:

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(…)
查找匹配项。但我什么都没有

对于正则表达式来说,这不是一项很好的工作。如果您想计算真正的数学表达式,您将无法得到一个能够处理所有情况的正则表达式。正如Carl Norum所说,这是一个关于为什么不能解析的类似讨论

对于正则表达式来说,这不是一项很好的工作。如果您想计算真正的数学表达式,您将无法得到一个能够处理所有情况的正则表达式。正如Carl Norum所说,这是一个关于为什么不能解析的类似讨论

试试看:

for digits: ((-[0-9]|[0-9])(\.[0-9])|[0-9])
for operators: (-|\+|\*|\/)
for variables: ([a-z]|[A-Z])
当在调节器中测试时,这些看起来很好

编辑

第一个可能有点“邋遢”,我没时间吃午饭了:p

试试:

for digits: ((-[0-9]|[0-9])(\.[0-9])|[0-9])
for operators: (-|\+|\*|\/)
for variables: ([a-z]|[A-Z])
当在调节器中测试时,这些看起来很好

编辑


第一个可能有点“草率”,我用完了午餐时间来处理它:p

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


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

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


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

如果你想要一个解析器,就写一个解析器。它是否总是Var=operator operator operator operator…@Carl!我不要解析器!我只想验证上面描述的一些简单表达式。@重新运行:是的,几乎是真的,但有时只是Var=operand@Jalal:是的,您确实需要解析器。解析器的确切目的是验证表达式。如果需要解析器,请编写解析器。它是否始终是Var=operator operator operator operator…@Carl!我不要解析器!我只想验证上面描述的一些简单表达式。@重新运行:是的,几乎是真的,但有时只是Var=operand@Jalal:是的,您确实需要解析器。解析器的确切目的是验证表达式。这与HTML完全不同!这只是一个简单的赋值表达式。。。!如果它不是真正的数学表达式,你限制你的输入,然后确定。我需要验证一些简单的赋值表达式!这是完全不同的HTML!这只是一个简单的赋值表达式。。。!如果它不是真正的数学表达式,你限制你的输入,然后确定。我需要验证一些简单的赋值表达式!