【发布时间】:2015-07-27 15:55:11
【问题描述】:
我正在编写一个求解方程的求解方法。该方法将是递归的;搜索所有外圆括号,找到后调用解决圆括号内的值,并在没有找到圆括号时返回值。
流程应该是这样的
20 * (6+3) / ((4+6)*9)
20 * 9 / ((4+6)*9)
20 * 9 / (10*9)
20 * 9 / 90
2
如您所见,每个匹配项可能具有不同的替换值。我需要将括号替换为它的评估结果。有没有办法做到这一点。这是我目前所拥有的。
public int solve(string etq)
{
Regex rgx = new Regex(@"\(([^()]|(?R))*\)");
MatchCollection matches;
matches = rgx.Matches(etq);
foreach(Match m in matches)
{
//replace m in etq with unique value here
}
//calculations here
return calculation
}
Regex.replace(...) 替换所有出现的指定模式。我希望能够匹配多个场景并用不同的输出替换每个场景
【问题讨论】:
-
我不认为你的代码在 C# 中工作。您是否从 PHP/Perl 复制代码并希望它可以在 C# 中工作? C# 不支持调用例程语法
(?R)。它只支持平衡组。 -
你为什么不用proper solution 来代替呢?正则表达式的方式会很痛苦。