.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, "<(?!.*?[>])",
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 < <u>2</u></p>"
var str=“值1是2”
众所周知,HTML很难用正则表达式进行解析。HTML规范非常宽容,浏览器实现往往更宽容。其结果是,仅使用正则表达式来匹配类似的内容几乎是不可能的
使用一个完整的HTML解析器生成DOM要健壮得多,该解析器能够理解生成DOM的所有特殊情况,然后在代码中遍历生成的DOM以查找尖括号
由于您已使用.NET标记了您的问题,因此我建议您使用来执行此类任务。对于如何检测HTML标记中的文本,有几个问题被问及;您应该能够根据自己的需要修改概念
基本上,您要查找的是一个
,后面不跟code>
,您希望将其替换为带符号的符号形式
。尝试以下方法:
var output = Regex.Replace(input, "<(?!.*?[>])", "<");
var output=Regex.Replace(输入“]),”;
这并不容易。请参阅相关问题的权威答案
正则表达式不是为这种类型的解析生成的。即使是标记化或dom解析也会导致问题。问题的标题说明了问题:
替换所有不属于HTML标记的
您的解析器如何知道<和>
是一个
标记,还是仅仅是单词和周围的两个孤立的尖括号
HTML解析器可能是最好的选择,但如何处理孤立括号是关键。此外,您需要寻找不匹配的标签或非法标签来捕获诸如标题的问题。 Read,然后考虑使用HTML敏捷包。LoL“解析带有正则表达式的HTML,将被污染的灵魂引入到生存的领域。”以及“字符串<代码> <代码>会发生什么?这将与每个<代码>匹配。