.net 替换所有<;及>;不属于HTML标记的一部分

.net 替换所有<;及>;不属于HTML标记的一部分,.net,html,regex,.net,Html,Regex,我一直在尝试使用正则表达式来替换所有文本字符串,除非这些字符串是HTML标记的一部分 例如: var str = "<p>The <b>value</b> <i>1</i> is < <u>2</u></p>" var str=“值1是,您希望将其替换为带符号的符号形式。尝试以下方法: var output = Regex.Replace(input, "<(?!.*?[>])",

我一直在尝试使用正则表达式来替换所有文本字符串,除非这些字符串是HTML标记的一部分

例如:

var str = "<p>The <b>value</b> <i>1</i> is < <u>2</u></p>"
var str=“值1是<2

在上面的示例中,我想要一个如下所示的结果字符串:

var str = "<p>The <b>value</b> <i>1</i> is &lt; <u>2</u></p>"
var str=“值1是2


众所周知,HTML很难用正则表达式进行解析。HTML规范非常宽容,浏览器实现往往更宽容。其结果是,仅使用正则表达式来匹配类似的内容几乎是不可能的

使用一个完整的HTML解析器生成DOM要健壮得多,该解析器能够理解生成DOM的所有特殊情况,然后在代码中遍历生成的DOM以查找尖括号


由于您已使用.NET标记了您的问题,因此我建议您使用来执行此类任务。

对于如何检测HTML标记中的文本,有几个问题被问及;您应该能够根据自己的需要修改概念

基本上,您要查找的是一个
,后面不跟code>
,您希望将其替换为带符号的符号形式
。尝试以下方法:

var output = Regex.Replace(input, "<(?!.*?[>])", "&lt;");
var output=Regex.Replace(输入“]),”;

这并不容易。请参阅相关问题的权威答案

正则表达式不是为这种类型的解析生成的。即使是标记化或dom解析也会导致问题。问题的标题说明了问题:

替换所有不属于HTML标记的

您的解析器如何知道
<和>
是一个
标记,还是仅仅是单词
周围的两个孤立的尖括号


HTML解析器可能是最好的选择,但如何处理孤立括号是关键。此外,您需要寻找不匹配的标签或非法标签来捕获诸如标题的问题。

Read,然后考虑使用HTML敏捷包。LoL“解析带有正则表达式的HTML,将被污染的灵魂引入到生存的领域。”以及“字符串<代码> <代码>会发生什么?这将与每个<代码>匹配。