如何恢复已替换的HTML括号?

时间:2011-06-20 16:15:13

标签: c# html regex replace

我正在使用一个数据库,该数据库的内容已将角度括号替换为字符^

e.g。

^b^some text^/b^

有人可以推荐一个c#解决方案将^字符转换回适当的括号,这样它就可以显示为html吗?我猜某种正则表达式会起作用......?

提前致谢

3 个答案:

答案 0 :(得分:4)

您可以将{n = ^字符替换为>,其中n为偶数,<其中n为奇数。

var html = "^b^some text^/b^";

var n = 0;
var result = Regex.Replace(html, "\\^", m => ((n++ % 2) == 0) ? "<" : ">");
// result == "<b>some text</b>"

请注意,只有原始HTML代码包含每个>字符的结束<字符(<p<b>...为坏)并且没有{{1}原始HTML代码中的字符(^不好)。

答案 1 :(得分:2)

更复杂但可能更安全的解决方案是搜索特定的字符集,例如^ p,^ img,^ div等及其对应物,^ / p ^,^ / div ^,^ / img ^等,并具体替换它们中的每一个。

这是否可行,取决于数据中存在哪些标签,以及您愿意安全地投入多大的努力。你知道是否有一组有限的标签被使用过吗?是否生成了HTML,或者是否有人手动编辑它们,必然会使模式搜索更复杂?

也许您可以先做一些分析,例如搜索和列出角色^出现的各种实例?我们谈论了多少数据,它是静态的,还是会继续增长(包括^ -problem)?

答案 2 :(得分:1)

整蛊,到了不可能完全自动完成的程度 - 除非你能对原始HTML做一些非常方便的假设(它是所有可能的HTML的一小部分,它已知符合某些可预测的模式)。我想最终还是要进行手工编辑。

话虽如此,并且对于不包含任何实际的C#代码而道歉,以下是我如何考虑接近它。

让我们逐步解决问题,我们首先转换常见模式。目标是在每个步骤之后减少剩余^字符的数量。

首先,正则表达式替换了许多非常常见的文字模式

^p^ -> <p>
^div^ -> <div>
^/div^ -> <div>

等。

接下来,替换包含可选文本的模式,例如

^link[anything-except-^]^ -> <link[original-text]>

然后继续。我的方法是只替换预期的模式,并通过这样做,避免错误的匹配。然后用其他模式迭代,直到没有剩下^字符。这需要大量的数据检查和大量模式。这是蛮力,不聪明,但你去了。