正则表达式组空

时间:2014-05-15 10:57:23

标签: c# regex

这是我的代码:

private static Regex paginationRegex = new Regex("<div class=\"pagination\">.*?<ul>(?<lis>.*?)</ul></div>",
                            RegexOptions.Singleline | RegexOptions.IgnoreCase);

        static void Main(string[] args)
        {
            string output = File.ReadAllText("output.html");

            var match = paginationRegex.Match(output);

            var lis = match.Groups["lis"].Value;

        }

这是我在output.html中的HTML

<div class="pagination">
        <ul>
                <li><a href="javascript:searchPage('1')" class="arrowDeactiveLeftFirst"> </a></li>  
                            <li><a href="javascript:searchPage('1')" class="deActivateleftArrow"> </a></li>
                    <li>
                                    <a class="current" href="javascript:searchPage('1')">1</a>
                                </li>
          <li>
                                    <a href="javascript:searchPage('2')">2</a> 
                                </li>
          <li>
                                    <a href="javascript:searchPage('3')">3</a> 
                                </li>
                      <li><a href="javascript:searchPage('2')" class="rightArrow"> </a></li>
                          <li><a href="javascript:searchPage('730')" class="arrowRightLast"> </a></li>
              </ul>
      </div>

lis组始终为空。我错过了什么?

1 个答案:

答案 0 :(得分:1)

我认为这只是因为您没有考虑代码段末尾的</ul></div>之间的空格。允许两者之间的空格似乎解决了这个问题:

//                                                                                  \/
Regex paginationRegex = new Regex("<div class=\"pagination\">.*?<ul>(?<lis>.*?)</ul>\\s*</div>",
                        RegexOptions.IgnoreCase | RegexOptions.Singleline);

我还不得不提到正则表达式通常不是解析HTML的最佳工具。查看Html Agility Pack以获得一个非常适合解析HTML的好库。