c# 将算术表达式拆分为 string[]
c# split arithmetic expression to string[]
我有一个简单的算术表达式,包含整数、括号和 +-*/。像这样:
((1+33)()(4+(3-5)))
我需要做的是将此表达式拆分为 string[]
,如下所示:
{(, (, 1, +, 33, ), (, ), (, 4, +, (, 3, -, 5, ), ), )}
我正在尝试使用 Regex
class
public string[] SplitString(string str)
{
return Regex.Split(str, "(?<=[()-+*/])|(?=[()-+*/])");
}
但输出数据不太正确:
{(, (, 1, +, 33, ), (, ), (, 4, +, (, **3-5**, ), ), )}
如果只是 3-5 给你带来了问题,你需要在你的模式中转义“-”,即
Regex.Split(str, "(?<=[()\-+*/])|(?=[()\-+*/])")
如果要匹配破折号,它需要位于正则表达式中字符 class 的第一个或最后一个位置:
(?<=[()+*/-])|(?=[()+*/-])
// ^ ^
否则,它被解释为字符范围 - 在您的例子中,从 )
到 *
。
我有一个简单的算术表达式,包含整数、括号和 +-*/。像这样:
((1+33)()(4+(3-5)))
我需要做的是将此表达式拆分为 string[]
,如下所示:
{(, (, 1, +, 33, ), (, ), (, 4, +, (, 3, -, 5, ), ), )}
我正在尝试使用 Regex
class
public string[] SplitString(string str)
{
return Regex.Split(str, "(?<=[()-+*/])|(?=[()-+*/])");
}
但输出数据不太正确:
{(, (, 1, +, 33, ), (, ), (, 4, +, (, **3-5**, ), ), )}
如果只是 3-5 给你带来了问题,你需要在你的模式中转义“-”,即
Regex.Split(str, "(?<=[()\-+*/])|(?=[()\-+*/])")
如果要匹配破折号,它需要位于正则表达式中字符 class 的第一个或最后一个位置:
(?<=[()+*/-])|(?=[()+*/-])
// ^ ^
否则,它被解释为字符范围 - 在您的例子中,从 )
到 *
。