Regex group empty

本文关键字:empty group Regex | 更新日期: 2023-09-27 18:03:24

这是我的代码:

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;
        }

这是我的HTML在output。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组总是空的。我错过了什么?

Regex group empty

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

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

我还不得不提到,正则表达式通常不是解析HTML的最佳工具。Html Agility Pack是一个很好的解析Html的库。