0

我需要帮助的最后一个正则表达式问题。我想要做的是能够解析数学表达式,同时仍然让我的正则表达式识别一元符号。我正在使用以下内容来解析整数:

[\+\-]?[0-9]+

在这两种情况下效果很好:

myVar = -5
myVar = +5

正则表达式正确地将 -5 和 +5 识别为整数。我的问题是,如果我有这样的场景:

myVar = 7-5

但是,这可以正确匹配:

myVar = 7*-5

现在 Regex 在 7-5 场景中所做的是识别 2 个整数,7 和 -5。实际上,我想要的是它能够识别一个整数 (7)、一个减号 (-) 和另一个整数 (5)。我需要什么正则表达式模式来做到这一点?

提前致谢。顺便说一下,这是 .NET Regex。

4

3 回答 3

4

正则表达式不是解析数学表达式的最佳选择。查看递归下降解析器反向波兰表示法或其他更合适的算法。

于 2011-07-03T17:39:03.983 回答
0

假设问题输入限制如下:

  1. 最多 1 个二元运算符(*、/、+、-)
  2. 最多 2 个一元运算符 (+, -)
  3. 所有数字都是整数
  4. 没有空格

那么下面的正则表达式将起作用:(
(([\+\-]?[\d]+)([\+\-\*\/]))*([\+\-]?[\d]+)
忽略第一组结果。)

如果要考虑空格,\s*请在括号之间添加:
(([\+\-]?[\d]+)\s*([\+\-\*\/]))*\s*([\+\-]?[\d]+)

示例输入和输出(来自第 2-4 组):
Input \2 \3 \4 -5 -5 +5 +5 7-5 7 - 5 7*-5 7 * -5 -7*-5 -7 * -5

于 2017-08-10T01:01:03.567 回答
-1

用这个:

  ((\d)+[\+\-\*/])*

然后使用 MatchCollection 和 Groups 来获得所需的结果。

于 2011-07-03T17:50:22.477 回答