假如有如下字符串:
1+Sum(1,Sum(2))*4+5怎样写正则表达式才能得到如下结果:
=======================================
sum(1,sum(2))
sum(2)
=======================================
谢谢了!
1+Sum(1,Sum(2))*4+5怎样写正则表达式才能得到如下结果:
=======================================
sum(1,sum(2))
sum(2)
=======================================
谢谢了!
解决方案 »
- 关于数据在两个窗口之间传递的问题
- 为什么textbox都显示System.Data.DataRowView,请高手帮忙啊
- 请教些给位高手关于c#接口,抽象类,设计方法的问题。
- 打开C#程序时无法引用Axmschart20lib和Mschart20lib类型库
- 帮忙看看一个LinQ的简单问题!
- (100分求)用户权限分配可以通过编程实现吗
- 用C#编写表格!!!
- ActiveReports WinFroms 平台 PDF 导出代码
- 我想把几个文本文件的第二列读入到SQL 数据库中同一表的不同的列.如何做?
- 求教如何消除GDI+绘图是,在窗口重绘事件时,屏幕闪烁问题,急!!
- 关于对List<T>加锁的问题!高手请入!!!
- 请帮忙看看这段语句有什么问题?
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();强客客的分
=====================================
怎么会有?<href> ??
我就得到一个Sum(2),我还希望能得到sum(1,sum(2))
1+Sum(1,Sum(2))*4+5
=====================================
第一个正则表达式得到:
sum(1,sum(2))
sum(2) 再求一个正则表达式得到:
1,sum(2)
2
<也就是sum里的参数〉能得到吗?
其实这种问题并不适合用正则来解决的,不是解决不了,主要是效率的问题
这种问题用正则解决,嵌套结构要用到平衡组,效率本身就不高,通常又要用递归来取内部结构,效率又打一折扣
其实这种需求可以自己写有穷自动机来解决,很久以前写过类似的,有空再想想吧,先给个正则的实现凑合用着吧//递归方法
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)