C#正则表达式提取div的内容

时间:2013-07-04 12:37:54

标签: c# regex

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

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

3 个答案:

答案 0 :(得分:8)

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

HTML不严格,格式也不规则..

使用htmlagilitypack


为什么要使用解析器?

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

  • 如果嵌套 divs
  • ,您的正则表达式将无效
  • 有些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

答案 1 :(得分:1)

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

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

所以没有双引号

答案 2 :(得分:0)

试试这个:

Regex r = new Regex(@"(?<text>(<div\s*?id=(\""|&quot;|&\#34;)"
    + @"thumb(\""|&quot;|&\#34;).*?>)(?>.*?</div>|.*?<div "
    + @"(?>depth)|.*?</div> (?>-depth))*)(?(depth)(?!)).*?</div>",
    RegexOptions.Singleline);