110,539
社区成员
发帖
与我相关
我的任务
分享
//递归方法
private void getNesting(string src, Regex reg, List<string> list)
{
MatchCollection mc = reg.Matches(src);
foreach(Match m in mc)
{
list.Add(m.Value);
src = m.Value.Remove(m.Value.Length-1, 1);
if (reg.IsMatch(src))
{
getNesting(src, reg, list);
}
}
}
//调用
string test = "1+Sum(1,Sum(2, Sum(3), 4), 5)*4+5+Sum(9,Sum(8, Sum(7), 6), 5)*6+7";
List<string> list = new List<string>();
Regex reg = new Regex(@"(?is)Sum\((?>(?<o>)\(|(?<-o>)\)|[^()])*(?(o)(?!))\)", RegexOptions.Compiled);
getNesting(test, reg, list);
foreach (string s in list)
{
richTextBox2.Text += s + "\n";
}
//输出
Sum(1,Sum(2, Sum(3), 4), 5)
Sum(2, Sum(3), 4)
Sum(3)
Sum(9,Sum(8, Sum(7), 6), 5)
Sum(8, Sum(7), 6)
Sum(7)
string str = "1+Sum(1,Sum(2))*4+5 ";
Regex reg = new Regex(@"(?<href>sum\(([^\,]+)?\d+\))", RegexOptions.IgnoreCase);
MatchCollection mc = reg.Matches(str);
foreach (Match m in mc)
{
Response.Write(m.Groups["href"].Value);
}
Response.End();