C# 需要正则表达式模式来捕获公式片段

C# 需要正则表达式模式来捕获公式片段,c#,regex,C#,Regex,我需要在C#中扩展正则表达式模式。当前模式捕获公式中的任何乘法或除法: ([\+-]?\d+,*\d*[eE][\+-]?\d+|[\-\+]?\d+,*\d*)([\/\*])(-?\d+,*\d*[eE][\+-]?\d+|-?\d+,*\d*) 这意味着,如果表达式是例如12+18*3+4-3/3,它将捕获18*3和-3/3。那太好了 现在我需要扩展它,以便它捕获以下示例:12+18*3+4-3/3+10*mod8。它应该首先捕获18*3,然后捕获-3/3,就像它到目前为止所做的那样,但

我需要在C#中扩展正则表达式模式。当前模式捕获公式中的任何乘法或除法:

([\+-]?\d+,*\d*[eE][\+-]?\d+|[\-\+]?\d+,*\d*)([\/\*])(-?\d+,*\d*[eE][\+-]?\d+|-?\d+,*\d*)
这意味着,如果表达式是例如
12+18*3+4-3/3
,它将捕获
18*3
-3/3
。那太好了


现在我需要扩展它,以便它捕获以下示例:
12+18*3+4-3/3+10*mod8
。它应该首先捕获
18*3
,然后捕获
-3/3
,就像它到目前为止所做的那样,但是它应该捕获
10mod8
(或者
10*mod8
)。我怎样才能做到这一点?谢谢

中间是
([\/\*])


尝试将其更改为
([/*]\*?mod)
-这将接受
*
/
mod
*mod

您无法在正则表达式中实现某种运算符优先级。正则表达式只是匹配,或者不匹配。正则表达式也不能处理匹配的嵌套括号。正确执行此操作的唯一方法是编写表达式词法分析器或定义一个。

。。。为什么要捕获
-3/3
?在这种情况下,您很幸运,得到了
-1
,但如果是
-3/-3
?你会得到1,用它代替,你会得到
41
…顺便说一句-我不确定它是否相关,但我曾经写过一个表达式计算器,这不是方法。很快你就会想要
3^-3/2+5sinpi
,而这方面的正则表达式是疯狂的(尽管我的计算器可以处理它)。您可能需要编写一个合适的解析器。除了正则表达式在这里不合适之外,您不需要在字符类中转义
-
(在您的情况下),
+
/
*
。正则表达式肯定不是解决此问题的最佳方法。只要看看你现有的regexp有多笨拙,想想用C#或其他语言编写代码会容易得多。@Kobi:好吧,既然“mod”是字符串而不是标准操作数,我的代码在它前面加了一个星号。原因是代码将“2(3+5)”转换为“2*(3+5)”。我确实意识到我应该改变代码中添加星号的部分,但是代码不是我的,我需要一个快速的解决方法。另外,正则表达式对我来说非常陌生。这让人耳目一新。匿名否决投票,以获得回答OP问题的正确解决方案。。。我想我应该更具教育性:)抱歉,看来是我,或者更好:我无法控制的扳机手指。。。我已撤消“错误单击”!:)科比,你就是那个人!多谢了,它很有魅力。我已经在问题的评论部分添加了我的评论,并解释了我为什么需要这个功能。@Bart-这很酷,只是虚拟的分数。我想我接受得很好……:)