C# 形成正则表达式以解析数值表达式

C# 形成正则表达式以解析数值表达式,c#,regex,C#,Regex,我试图以字符串形式解析数字比较。我想标记一个字符串,比如45+(30*2)正则表达式并不是这项工作的最佳工具。你可以用它们实现你想要的,但是你必须要跳出障碍 第一个是嵌套结构,如45+((10+20)*2) (?\() |(?\)) |(?(p)[^()]) )+ (?(p)(?!) 是的,这就是需要的。请阅读关于此的深入解释 数字术语将由\d+或[0-9]+(仅适用于.NET中的ASCII数字)匹配,而不是由\w+匹配 关于你的问题: 一个数字或括号内的术语,后跟一个运算术语,整个过程重复任

我试图以字符串形式解析数字比较。我想标记一个字符串,比如
45+(30*2)正则表达式并不是这项工作的最佳工具。你可以用它们实现你想要的,但是你必须要跳出障碍

第一个是嵌套结构,如
45+((10+20)*2)
(?\()
|(?\))
|(?(p)[^()])
)+
(?(p)(?!)
是的,这就是需要的。请阅读关于此的深入解释

数字术语将由
\d+
[0-9]+
(仅适用于.NET中的ASCII数字)匹配,而不是由
\w+
匹配

关于你的问题:

一个数字或括号内的术语,后跟一个运算术语,整个过程重复任意次数,以数字或括号内的术语结尾

你想做错事。虽然您可以使用PCRE正则表达式来实现这一点,但在.NET中要困难得多

您可以使用正则表达式进行词法分析(也称为标记化)。然后使用应用程序代码来理解regex返回给您的令牌。不要在语义上使用正则表达式,你不会得到漂亮的代码

也许您应该使用现有的数学解析库,例如


或者您可能需要使用自定义解决方案,并且……

我希望下面的正则表达式能够满足您的期望

(([><!=]{1}[=]{0,1})|[\+\-\*\/]{1}|\(.*\)|[\d]*| *)

([>不完全是关于主题的,但是你应该用
\d
来表示数字,而不是
\w
我想你需要解析的是一个数学表达式,有很多库可以为你做这件事看看这个
(([><!=]{1}[=]{0,1})|[\+\-\*\/]{1}|\(.*\)|[\d]*| *)