<h1>My caption</h1>
<p>Here will be some text</p>
<hr class="cs" />
<h2 id="x">CaptionX</h2>
<p>Some text</p>
<hr class="cs" />
<h2 id="x">CaptionX</h2>
<p>Some text</p>
<hr class="cs" />
<h2 id="x">CaptionX</h2>
<p>Some text</p>
我需要以下输出:
我有什么atm:
<hr.*?/>
<h2.*?>(.*?)</h2>
([\W\S]*?)
<hr.*?/>
由于尾随<hr/>
,这将给我每个奇数子标题+内容(例如,1,3,...)。为了解析h1-caption我有另一种模式(<h1.*?>(.*?)</h1>
),它只给我标题而不是内容 - 我对那个atm很好。
是否有人为我提供了提示/解决方案或任何替代逻辑(例如,通过阅读器解析html并以这种方式分配?)?
修改
正如一些人带来的HTMLAgilityPack,我很好奇这个好工具。我完成了<h1>
- 标签的内容
但是...我的问题是解析其余部分。这是由以下原因引起的:内容的标记可能会有所不同 - 从<p>
到<div>
和<ul>
...
atm这似乎或多或少地遍历整个文档并解析标签的标签......?
任何提示?
答案 0 :(得分:9)
这个
你真的需要HTML parser答案 1 :(得分:6)
不要使用正则表达式来解析HTML。考虑使用HTML Agility Pack。
答案 2 :(得分:1)
正如其他人所提到的,使用HtmlAgilityPack。但是,如果您喜欢jQuery / CSS选择器,我只是找到了一个名为Fizzler的HtmlAgilityPack的分支:
http://code.google.com/p/fizzler/
使用此功能,您可以使用以下命令查找所有<p>
标记:
var pTags = doc.DocumentNode.QuerySelectorAll('p').ToList();
或找到像<div id="myDiv"></div>
这样的特定div:
var myDiv = doc.DocumentNode.QuerySelectorAll('#myDiv');
它不能比那更容易!