首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用正则表达式匹配一元符号和解析数学

使用正则表达式匹配一元符号和解析数学
EN

Stack Overflow用户
提问于 2011-07-04 01:30:02
回答 3查看 1.3K关注 0票数 0

最后一个我需要帮助的Regex问题。我想要做的是能够解析一个数学表达式,同时让我的Regex识别一元符号。我使用下面的代码来解析一个整数:

代码语言:javascript
运行
复制
[\+\-]?[0-9]+

它在以下两个场景中工作得很好:

代码语言:javascript
运行
复制
myVar = -5
myVar = +5

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

代码语言:javascript
运行
复制
myVar = 7-5

然而,这是正确匹配的:

代码语言:javascript
运行
复制
myVar = 7*-5

现在,正则表达式在7-5场景中所做的是识别2个整数,7和-5。实际上,我希望它能够识别一个整数(7),一个减号(-),然后是另一个整数(5)。我需要哪种正则表达式模式才能做到这一点?

提前谢谢。顺便说一下,这是.NET正则表达式。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-04 01:39:04

正则表达式不是解析数学表达式的最佳选择。看看Recursive descent parserReverse Polish notation或其他更合适的算法。

票数 4
EN

Stack Overflow用户

发布于 2017-08-10 09:01:04

假设问题输入受限,如下所示:

  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

票数 0
EN

Stack Overflow用户

发布于 2011-07-04 01:50:22

使用以下命令:

代码语言:javascript
运行
复制
  ((\d)+[\+\-\*/])*

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6564393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档