c#将算术表达式拆分为字符串[]

本文关键字:字符串 拆分 表达式 | 更新日期: 2023-09-27 17:58:23

我有一个简单的算术表达式,包含整数、括号和+-*/。像这样:

((1+33)()(4+(3-5)))

我需要做的是将这个表达式拆分为string[],如下所示:

{(, (, 1, +, 33, ), (, ), (, 4, +, (, 3, -, 5, ), ), )}

我正在尝试使用Regex

public string[] SplitString(string str)
{
     return Regex.Split(str, "(?<=[()-+*/])|(?=[()-+*/])");
}

但输出数据并不完全正确:

{(, (, 1, +, 33, ), (, ), (, 4, +, (, **3-5**, ), ), )}

c#将算术表达式拆分为字符串[]

如果要匹配破折号,它需要位于regex:中字符类的第一个或最后一个位置

(?<=[()+*/-])|(?=[()+*/-])
//        ^            ^

否则,它将被解释为一个字符范围——在您的情况下,从)*

演示。

如果只是3-5给你带来了问题,你需要避开你的模式中的"-",即

Regex.Split(str, "(?<=[()''-+*/])|(?=[()''-+*/])")