【发布时间】:2009-07-23 17:47:47
【问题描述】:
我正在开发一个专门的 HTML 剥离器。当前的剥离器将
和
标记替换为双回车符。但是,当像这样剥离代码时:
标签包围的其他代码,我们希望保留双回车替换。
标记替换为 \t,而将
<td>First Text</td><td style="background:#330000"><p style="color:#660000;text-align:center">Some Text</p></td>
它(显然)产生
First Text
Some Text
在这种情况下,我们希望将
替换为空,因此它会生成:
First Text (tab) Some Text
但是,对于
标签未被
基本上,我们尝试将
和
标记替换为 \r\r 仅当它们没有被 标记包围时。
当前代码:(C#)
// insert tabs in places of <TD> tags
result = System.Text.RegularExpressions.Regex.Replace(result,
@"<td\b(?:[^>""']|""[^""]*""|'[^']*')*>", "\t",
System.Text.RegularExpressions.RegexOptions.IgnoreCase);
// insert line paragraphs (double line breaks) in place
// of <P>, <DIV> and <TR> tags
result = System.Text.RegularExpressions.Regex.Replace(result,
@"<(div|tr|p)\b(?:[^>""']|""[^""]*""|'[^']*')*>", "\r\r",
System.Text.RegularExpressions.RegexOptions.IgnoreCase);
(剥离器还有更多代码;这是相关部分)
关于如何在不完全重写整个剥离器的情况下做到这一点的任何想法?
编辑: 我宁愿不使用库,因为让人头疼的是要让它签名并包含在项目中(它本身就是要包含在另一个项目中的库),更不用说法律问题了。不过,如果没有其他解决方案,我可能会使用 HTML Agility Pack。
大多数情况下,剥离器只是删除它发现的任何看起来像标签的东西(使用基于正则表达式食谱中的正则表达式的大型正则表达式完成。这个,用 /r 替换换行符标签,并处理多个选项卡是自定义剥离代码首当其冲。
【问题讨论】:
-
有趣的更新。所以我想关于这件事要问的一件事是,您是否要操纵比列出的标签更多的标签?我不确定什么会花费更多时间,从头开始编写自己的解析器,尝试找到所有细微差别,或者花时间在已经为你完成的库上签收。
-
我们只进行了一些自定义操作 - 主要是剥离标签。请参阅上面的第二次编辑。