最后一个我需要帮助的Regex问题。我想要做的是能够解析一个数学表达式,同时让我的Regex识别一元符号。我使用下面的代码来解析一个整数:
[\+\-]?[0-9]+
它在以下两个场景中工作得很好:
myVar = -5
myVar = +5
正则表达式正确地将-5和+5识别为整数。我的问题是,如果我有这样的场景:
myVar = 7-5
然而,这是正确匹配的:
myVar = 7*-5
现在,正则表达式在7-5场景中所做的是识别2个整数,7和-5。实际上,我希望它能够识别一个整数(7),一个减号(-),然后是另一个整数(5)。我需要哪种正则表达式模式才能做到这一点?
提前谢谢。顺便说一下,这是.NET正则表达式。
发布于 2011-07-04 01:39:04
正则表达式不是解析数学表达式的最佳选择。看看Recursive descent parser或Reverse Polish notation或其他更合适的算法。
发布于 2017-08-10 09:01:04
假设问题输入受限,如下所示:
然后,下面的正则表达式将起作用:
(([\+\-]?[\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
发布于 2011-07-04 01:50:22
使用以下命令:
((\d)+[\+\-\*/])*
然后使用MatchCollection和Groups来获得所需的结果。
https://stackoverflow.com/questions/6564393
复制相似问题