<li>
                  <div class="div_1">11</div>
         。。
      </li>我想要提取 <li>和</li>之间的东西。我使用如下的代码,结果不能成功,请高手指点。    string sAll = "<li><div>..asfsadf</div></li><li>safsaf</li>
        string sRegex = "<li>(.*?)</li>";
        Regex reg = new Regex(sRegex);
        MatchCollection mc = reg.Matches(sAll);
        foreach( Match m in mc)
       {
        }

解决方案 »

  1.   

    Regex reg = new Regex(@"(?s)<li>(.*?)</li>");
      

  2.   

    or
    Regex reg = new Regex(@"<li>([\s\S]*?)</li>");
      

  3.   


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.IO;
    namespace sxLdfang
    {
        class Program
        {
            static void Main(string[] args)
            {
                string html = @"<li><div>..asfsadf</div></li>
    <li>safsaf</li>";
                string pattern = @"(?is)(?<=<li>).*?(?=</li>)";
                MatchCollection mc = Regex.Matches(html, pattern);
                foreach (Match m in mc)
                {
                    Console.WriteLine(m.Value);
                }
                Console.ReadKey();
            }
        }
    }
    运行结果:
    <div>..asfsadf</div>
    safsaf
      

  4.   

        string html = @"<li>
                <div>..asfsadf</div>
            </li>
            <li><li>safsaf</li>";
         string pattern = @"<li>(?:(?!</?li>)[\s\S])*</li>";
         MatchCollection mc = Regex.Matches(html, pattern);
         foreach (Match m in mc)
         {
             Console.WriteLine(m.Value);
         }
         Console.ReadKey();结果就是:
    <div>..asfsadf</div>
    safsaf有这样不合法的标签,也一样可以获取数据
    <li><li>safsaf</li>
      

  5.   


    string pattern = @"<li>(?:(?!</?li>)[\s\S])*</li>";
    这个看不懂,能否解释一下?
    我以前也经常弄正则的,可是这个实在看不懂
      

  6.   

    huangwenquan123 的运行结果是
    <li><div>..asfsadf</div></li>
    <li>safsaf</li>
    并没有去掉两边的<li>。风云的程序运行结果是正确的!
    但是
      string pattern = @"(?is)(?<=<li>).*?(?=</li>)";
    我看不懂,谁能解释一下?
      

  7.   

    我发现使用 (?<=<li>).*?(?=</li>)
    也是OK的!
      

  8.   

    取m.Groups[1].value就可以。
      

  9.   

    string pattern = @"(?is)(?<=<li>).*?(?=</li>)";
    (?<=exp)匹配前面是exp
    (?=exp)匹配后面是exp
    (?:(?!</?li>)[\s\S])*匹配不是</?li的任意其他数。
      

  10.   

    http://www.jb51.net/tools/zhengze.html
      

  11.   

    非常感谢。但我发现有更简单的方法。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.IO;
    namespace sxLdfang
    {
        class Program
        {
            static void Main(string[] args)
            {
                string html = @"<li><div>..asfsadf</div></li>
    <li>safsaf</li>";
                string pattern = "<li>(.*?)</li>";
                MatchCollection mc = Regex.Matches(html, pattern);
                foreach (Match m in mc)
                {
                    Console.WriteLine(m.Groups[1].Value);
                }
                Console.ReadKey();
            }
        }
    }
      

  12.   

    参考正则基础之——小数点
    .NET正则基础之——.NET正则匹配模式 
    正则基础之——环视