正则表达式 – 使用嵌套的div查找id的div内容
发布时间:2020-12-14 06:26:13 所属栏目:百科 来源:网络整理
导读:在任何人问之前,我没有做任何类型的屏幕抓取. 我正在尝试解析html字符串以找到具有特定id的div.我不能为我的生活得到这个工作.以下表达式在一个实例中有效,但在另一个实例中无效.我不确定它是否与html中的额外元素有关. divs*?id=(""|quot;|#34;)content(
在任何人问之前,我没有做任何类型的屏幕抓取.
我正在尝试解析html字符串以找到具有特定id的div.我不能为我的生活得到这个工作.以下表达式在一个实例中有效,但在另一个实例中无效.我不确定它是否与html中的额外元素有关. <divs*?id=(""|"|")content(""|"|").*?>s*?(?>(?! <divs*?> | </div> ) | <divs*?>(?<DEPTH>) | </div>(?<-DEPTH>) | .?)*(?(DEPTH)(?!))</div> 它正确地找到具有正确id的第一个div,但它然后在第一个结束div处关闭,而不是相关的div. <div id="firstdiv">begining content<div id="content">some other stuff <div id="otherdiv">other stuff here</div> more stuff </div> </div> 这应该带回来 <div id="content">some other stuff <div id="otherdiv">other stuff here</div> more stuff </div> ,但由于某种原因,事实并非如此.它带回来: <div id="content">some other stuff <div id="otherdiv">other stuff here</div> 有没有人有更容易的表达来处理这个? 为了澄清,这是在.NET中,我正在使用DEPTH关键字.你可以找到更多细节here.
在.NET中,您可以这样做:
(?<text> (<divs*?id=("|"|")content("|"|").*?>) (?> .*?</div> | .*?<div (?>depth) | .*?</div> (?>-depth) )*) (?(depth)(?!)) .*?</div> 您必须使用单行选项.以下是使用控制台的示例: using System; using System.Text.RegularExpressions; namespace Temp { class Program { static void Main() { string s = @" <div id=""firstdiv"">begining content<div id=""content"">some other stuff <div id=""otherdiv"">other stuff here</div> more stuff </div> </div>"; Regex r = new Regex(@"(?<text>(<divs*?id=(""|"|")" + @"content(""|"|").*?>)(?>.*?</div>|.*?<div " + @"(?>depth)|.*?</div> (?>-depth))*)(?(depth)(?!)).*?</div>",RegexOptions.Singleline); Console.WriteLine("HTML:n"); Console.WriteLine(s); Match m = r.Match(s); if (m.Success) { Console.WriteLine("nCaptured text:n"); Console.WriteLine(m.Groups[4]); } Console.ReadLine(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |