我已经看到了我的一些相关问题,我尝试了它们但是它们不起作用。 我想匹配div中的内容和id“thumbs”。但是regex.Success返回false :(
Match regex = Regex.Match(html, @"<div[^>]*id=""thumbs"">(.+?)</div>");
答案 0 :(得分:8)
正则表达式不是解析HTML文件的好选择..
HTML不严格,格式也不规则..
为什么要使用解析器?
考虑你的正则表达式。有无数种情况你可以破解你的代码
您可以使用此代码使用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=(\""|"|&\#34;)"
+ @"thumb(\""|"|&\#34;).*?>)(?>.*?</div>|.*?<div "
+ @"(?>depth)|.*?</div> (?>-depth))*)(?(depth)(?!)).*?</div>",
RegexOptions.Singleline);