我正在使用一个数据库,该数据库的内容已将角度括号替换为字符^
。
e.g。
^b^some text^/b^
有人可以推荐一个c#解决方案将^
字符转换回适当的括号,这样它就可以显示为html吗?我猜某种正则表达式会起作用......?
提前致谢
答案 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]>
然后继续。我的方法是只替换预期的模式,并通过这样做,避免错误的匹配。然后用其他模式迭代,直到没有剩下^字符。这需要大量的数据检查和大量模式。这是蛮力,不聪明,但你去了。