我有这个字符串
<p/><ul><li>test1<p/></li><li>test2<p/></li></ul><p/>
我尝试做的是提取“li”标签内的所有“p”标签,但不提取其外部的“p”标签。
我只能到目前为止 通过
提取所有“li”标签\<li\>(.*?)\</li\>
我迷失了如何在其中提取“p”标签。
非常感谢任何指针!
答案 0 :(得分:5)
使用HTML解析器而不是正则表达式更加可靠。使用HTML Agility Pack:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<p/><ul><li>test1<p/></li><li>test2<p/></li></ul><p/>");
IEnumerable<HtmlNode> result = doc.DocumentNode
.Descendants("li")
.SelectMany(x => x.Descendants("p"));
答案 1 :(得分:2)
<li>(.*?<p/?>.*?)</li>
将匹配<li>
之间包含<p/>
的所有内容。如果您只想匹配<p/>
,那么:
(?<=<li>).*?(<p/?>).*?(?=</li>)
将第1组与<p/>
标记匹配。
答案 2 :(得分:2)
试试这个,它使用了前瞻,因此LI不是选择的一部分。
(?<=<li>)(.*?<p/?>.*?)(?=</li>)
P.S。您还需要修复HTML,因为P标签的方式不对。正则表达式适用于以下HTML。
<ul><li><p>test1<p/></li><li><p>test2<p/></li></ul>