6

我已经看到了我的一些相关问题,并且我尝试了它们,但它们不起作用。我想将 div 中的内容与 ID“thumbs”相匹配。但是 regex.Success 返回 false :(

Match regex = Regex.Match(html, @"<div[^>]*id=""thumbs"">(.+?)</div>");
4

3 回答 3

8

正则表达式不是解析 HTML 文件的好选择。

HTML 并不严格,其格式也不规则。

使用htmlagilitypack


为什么要使用解析器?

考虑您的正则表达式。有无数种情况可以破坏您的代码

  • 如果有嵌套的div ,您的正则表达式将不起作用
  • 有些 div 没有结束标记!(XHTML 除外)

您可以使用此代码来检索它HtmlAgilityPack

HtmlDocument doc = new HtmlDocument();
doc.Load(yourStream);

var itemList = doc.DocumentNode.SelectNodes("//div[@id='thumbs']")//this xpath selects all div with thubs id
                  .Select(p => p.InnerText)
                  .ToList();

//itemList now contain all the div tags content having its id as thumbs
于 2013-07-04T12:45:27.983 回答
1

不,我不认为他需要逃跑。他在模式前面有@。我认为这是正确的:

<div[^>]*id="thumbs">(.+?)</div>

所以没有双双引号

于 2013-07-04T12:46:00.843 回答
0

尝试这个:

Regex r = new Regex(@"(?<text>(<div\s*?id=(\""|&quot;|&\#34;)"
    + @"thumb(\""|&quot;|&\#34;).*?>)(?>.*?</div>|.*?<div "
    + @"(?>depth)|.*?</div> (?>-depth))*)(?(depth)(?!)).*?</div>",
    RegexOptions.Singleline);
于 2013-07-04T12:46:20.250 回答