本帖最后由 honkerhero 于 2012-07-06 11:38:50 编辑

解决方案 »

  1.   

    内容只有这样吗?
    string result = Regex.Replace(str, @"(?is)<span[^>]*?>(.+)</span>", "$1");
      

  2.   

    [code=C#]string pattern = @"(?i)(?<=<SPAN Class=""c1"">)[\s\S]*(?=</span>)";
                   string tempStr = Regex.Match(tempStr,pattern).Value;[/code]
      

  3.   

    不是, 系统中可能有很多这样的标记, 但原则就是把span中的内容从中拿出来
      

  4.   

    <SPAN Class="c1">
    <div><span class="c2"></span>abc<span class="c2"></span>
    </div>
    </span>
    <SPAN Class="c1">
    <div><span class="c2"></span>abc<span class="c2"></span>
    </div>
    </span>
    这样的话, 会把头和尾去掉, HTML格式乱了
      

  5.   

    试试看...
                string str = @"<SPAN Class=""c1"">
    <div><span class=""c2""></span>abc<span class=""c2""></span>
    </div>
    </span>
    <SPAN Class=""c1"">
    <div><span class=""c2""></span>abc<span class=""c2""></span>
    </div>
    </span>
    ";
                Regex reg = new Regex(@"(?is)<span[^>]*?>[^<>]+((?:(?:(?<Open><[^>]+?>)[^<>]*)*(?:(?<-Open></[^>]+?>)[^<>]*)*)*)(?(Open)(?!))</span>");
                foreach (Match m in reg.Matches(str))
                    Console.WriteLine(m.Groups[1].Value);
      

  6.   


    string tempStr = File.ReadAllText(@"C:\Documents and Settings\Administrator\桌面\Test.txt", Encoding.GetEncoding("GB2312"));//读取txt
                    Regex reg = new Regex(@"(?isx)                      #匹配模式,忽略大小写,“.”匹配任意字符                      <span[^>]*>                      #开始标记“<span...>”                          ((?>                         #分组构造,用来限定量词“*”修饰范围                              <span[^>]*>  (?<Open>)   #命名捕获组,遇到开始标记,入栈,Open计数加1                          |                           #分支结构                              </span>  (?<-Open>)      #狭义平衡组,遇到结束标记,出栈,Open计数减1                          |                           #分支结构                              (?:(?!</?span\b).)*      #右侧不为开始或结束标记的任意字符                          )*                          #以上子串出现0次或任意多次                          (?(Open)(?!)))               #判断是否还有'OPEN',有则说明不配对,什么都不匹配                      </span>                      ");
                    tempStr = reg.Replace(tempStr, a =>
                    {
                        return a.Groups[1].Value;                });
     /*
                     * <div><span class="c2"></span>abc<span class="c2"></span>
                        </div>
                        <div><span class="c2"></span>abc<span class="c2"></span>
                        </div>
                     */
      

  7.   

    喔 你是要替换,
                string str = @"fdsafsdfsdfa<SPAN Class=""c1"">
    <div><span class=""c2""></span>abc<span class=""c2""></span>
    </div>
    </span>asdfasdfasd
    <SPAN Class=""c1"">
    <div><span class=""c2""></span>abc<span class=""c2""></span>
    </div>
    </span>fsad
    ";
                Regex reg = new Regex(@"(?is)\s*<span[^>]*?>((?:(?<Open>)<span[^>]*?>|(?<-Open>)</span>|(?:(?!</?span).)*)*)(?(Open)(?!))</span>\s*");
                str = reg.Replace(str, "$1");
                Console.WriteLine(str);
      

  8.   

    再问一下, 能不能把前半截补全, 把后半截去掉, 变成下边的样子fdsafsdfsdfa<SPAN Class=""c1""></span>
    <div><span class=""c2""></span>abc<span class=""c2""></span>
    </div>
    asdfasdfasd
    <SPAN Class=""c1""></span>
    <div><span class=""c2""></span>abc<span class=""c2""></span>
    </div>
    fsad