C# 使用c解析html字符串时处理html特殊字符#

C# 使用c解析html字符串时处理html特殊字符#,c#,regex,html-parsing,html-agility-pack,C#,Regex,Html Parsing,Html Agility Pack,我正在使用htmlagility pack解析html字符串,并将某些模式转换为链接 给定一个html字符串和一个模式“mystring”。我必须用替换hrml字符串中出现的此模式。但有两个例外 1.如果模式已经在锚定标记中,我不应该替换它,这意味着它的直接父级或任何级别的父级不应该是锚定标记。例如:testmystringmystringmystring test

我正在使用htmlagility pack解析html字符串,并将某些模式转换为链接

给定一个html字符串和一个模式“mystring”。我必须用
替换hrml字符串中出现的此模式。但有两个例外

1.如果模式已经在锚定标记中,我不应该替换它,这意味着它的直接父级或任何级别的父级不应该是锚定标记。例如:
test
  • mystringmystringmystring test<10和5
  • 有一个问题。Htmlagility解析器将小于符号视为html特殊字符,并将“<10和5”视为html标记,并生成类似的内容。

    <10=“”和=“”5=“”>(具有空值的属性)

    使用HtmlAlityParser是否有解决方法? 我应该退一步使用正则表达式吗?在这种情况下,我如何处理any level anchor异常? 有更好的方法解决这个问题吗?

    使用两个建议:

  • 你可以预先清理坏掉的HTML,这样HtmlAgilityPack工作得更好。这可能更容易

  • 或者自己通过一个简单的基于正则表达式的解析器来解析和跟踪标记的嵌套结构。但是许多HTML标记不必以规范结尾,例如

    。而且您还必须处理这里的破尖括号


  • 选项2)并不难——但首先要做更多的工作,以提高可靠性和控制如何处理“畸形”的回报“来自低质量源的输入。

    我无法控制html输入字符串。在视图中呈现相同的html字符串时,效果良好。为什么解析器不能区分?如果我尝试对输入字符串进行编码或处理,那么我最终会将所有<更改为包含在适当的html标记中。您尝试了一些启发式方法,比如只替换“我最初考虑过这个。但是想法可能有问题。尝试过几个案例,现在对我来说很好。
    inputhtml = inputhtml.Replace("< ", "&lt; ");