【发布时间】:2014-09-03 12:49:27
【问题描述】:
我在尝试使用正则表达式从 Html 字符串中复制字符串时遇到了问题,但它没有给我我需要的东西。
我正在尝试将表格从 Div 中取出,并且我已使用 RegEx 尝试过此操作
string strLook = respData2;
string s = Regex.Match(strLook, "<div id='results'(.+)</div>", RegexOptions.Singleline).Groups[1].Value;
这只是给了我整个 Html 字符串。
我也尝试过使用 SubString
int starPos = strLook.LastIndexOf("<div id='results'>") + "<div id='results'>".Length + 1;
int length = strLook.IndexOf("</div>") - starPos;
string sub = strLook.Substring(starPos, length);
当我单步执行子字符串时,它说最后一个索引是 18,我知道 Div 距离开头不是 18 个字符(除非我错了 18 的用途),这甚至不是也可以获取 Div。
那么我如何获取Div的内容,这是一个html表格,所以我可以将它写入一个文件。
谢谢
【问题讨论】:
-
不要使用正则表达式解析 HTML 字符串。
-
一眼看出两个问题:1.使用正则表达式解析HTML 2.使用贪心量词
.+ -
你应该看看 HTML Agility Pack htmlagilitypack.codeplex.com 这是一个强大而轻便的 HTML 工具
-
stackoverflow.com/questions/846994/how-to-use-html-agility-pack 你看过这个 SO 的帖子了吗?
-
这是 comp sci 101 解决方案,不是最好的,但如果这是一次性的事情并且您不想使用工具,则需要在您的 div 中考虑 div 标签想。所以做一个open-div-count变量并设置为1。然后比较“”的索引,如果open div标签在前/索引较少,则将1添加到您的open- div-count,否则减去 1。无论哪种方式,将较短的子字符串添加到结果中,冲洗并重复。当你的 open-div-count 变量为 0 时,你就完成了。