数据是这样的
<div> ......</div><div><div/>....
在数据中有许多这样的DIV对;
我想用 string s= Regex.Replace()过虑掉指定的第几个DIV对.
如果不好做的话,那应该怎么做去掉第一个,或去掉最后一个应该怎么做.

解决方案 »

  1.   

    第一个和最后一个用String.IndexOf 或者String.LastIndexOf 也可以解决
      

  2.   

    这种类似于XML结构的内容,可以换个思路,用Xml来实现,可以充分发挥C#处理Xml的功能。用正则不是不可以,但是要查资料,调试很麻烦(每次都忘记语法)
                
                string div = "<div>123</div> <div>456</div> <div>abc</div>";
                div = String.Format("<anything>{0}</anything>", div);
                XmlDocument xd = new XmlDocument();
                xd.LoadXml(div);
                int i = 0;
                foreach (XmlNode xn in xd.GetElementsByTagName("div"))
                {
                    i++;
                    String value = xn.InnerXml; //要取哪几个div里面的东东悉听尊便。
                  }
    如果好用,别忘记给点分,还差18分升级。
      

  3.   

    也可以写正则来实现..string str="<div>123</div> <div>456</div> <div>abc</div>";
    Regex reg=new Regex("<div>[^>]+?</div>");
    if(reg.IsMatch(str))
    {
       MatchCollection mc; 
        mc = re1.Matches(str); 
      for (int i = 0; i < mc.Count; i++)        
        {.........} 
    }
      

  4.   

    这要看你的源字符串中<div>标签是否有嵌套了,如果没有嵌套,还是比较好办的,如果有嵌套,那就麻烦了如果没有嵌套,思路是这样的,没有做数据合法性检查,楼主自己完善
    int num = Convert.ToInt32(textBox1.Text);
    string yourStr = richTextBox1.Text;
    string result = Regex.Replace(yourStr, @"^((((?!</?div>)[\s\S])*<div>[\s\S]*?</div>){"+(num-1)+@"}((?!</?div>)[\s\S])*)<div>[\s\S]*?</div>", "$1", RegexOptions.IgnoreCase | RegexOptions.Compiled);
    richTextBox2.Text = result;
      

  5.   

    另一种用正则委托的方法int i=0;    //全局变量int num = Convert.ToInt32(textBox1.Text);    //想要去掉的<div>对的序号
    string yourStr = richTextBox1.Text;    //源字符串
    string result = Regex.Replace(yourStr, @"<div>[\s\S]*?</div>", delegate(Match m){i++;if(i==num) return ""; else return m.Value;}, RegexOptions.IgnoreCase);
    richTextBox2.Text = result;
      

  6.   

    头二个没有嵌套.第三个第四个有嵌套的DIV在里面...这可怎么办呀?
      

  7.   

    不整复杂的了,我现在只想去掉第一个DIV对.
      

  8.   

    确实有点着急了.我现在只要去掉第一个DIV对就行.应该怎么写.
      

  9.   

    如果能保证第一个div对没有嵌套,很简单
    string result = Regex.Replace(yourStr, @"^(((?!</?div>)[\s\S])*)<div[^>]*>[\s\S]*?</div>", "$1", RegexOptions.IgnoreCase);
    如果不能保证是否有嵌套,用下面的
    string result = Regex.Replace(yourStr, @"^(((?!</?div)[\s\S])*)<div[^>]*>(((?<o>)<div[^>]*>|(?<-o>)</div>|((?!</?div)[\s\S]))*)(?(o)(?!))</div>", "$1", RegexOptions.IgnoreCase);
      

  10.   

    第一个多了一个>,应该这样string result = Regex.Replace(yourStr, @"^(((?!</?div)[\s\S])*)<div[^>]*>[\s\S]*?</div>", "$1", RegexOptions.IgnoreCase);