我有一个简单的算术表达式,包含整数、括号和+-*/。如下所示:
((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**, ), ), )}
发布于 2016-07-23 11:54:26
如果要匹配破折号,则需要在regex中字符类中的第一个或最后一个位置:
(?<=[()+*/-])|(?=[()+*/-])
// ^ ^否则,它将被解释为字符范围--在您的示例中,从)到*。
演示。
发布于 2016-07-23 11:54:11
如果只是3-5引起你的问题,你需要避开你的模式中的"-“。
Regex.Split(str, "(?<=[()\\-+*/])|(?=[()\\-+*/])")https://stackoverflow.com/questions/38541447
复制相似问题