【发布时间】:2016-02-29 15:42:43
【问题描述】:
在某些情况下,我的客户向我发送了一个 html 字符串,其中包含一些结构不正确的元素属性。像这样:
<img src="../imgTest.jpg" alt="Something "quoted here, or here"">
接下来我如何动态地将这些情况更改为类似的情况?
<img src="../imgTest.jpg" alt="Something 'quoted here, or here'">
我需要这个 html 不是在浏览器上显示,而是用它做一些操作。
我正在使用 HtmlAgilityPack 来控制 html 问题,但对于这些情况,它会将我的 html 字符串更改为此,这不是我想要的:
<img src="../imgTest.jpg" alt="Something" quoted="" here,="" or="" here="">
我的 HtmlAgilityPack 代码:
var htmlDoc = new HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.LoadHtml(myHtmlStr);
var htmlError = htmlDoc.ParseErrors.SafeAny();
if (!htmlError)
myHtmlStr = htmlDoc.DocumentNode.InnerHtml;
【问题讨论】:
-
好吧,恐怕没有正则表达式解决方案看起来不错且安全。尝试
(?<=<\w+\s[^<]*)(?<!\w+=)"(?!\s*/?>|\s+\w+=")并替换为'。 -
您的 html 片段是否总是像您示例中的 img 一样的单个元素?是否总是相同的属性被破坏?
-
您可以尝试类似
(=\s*"[^=">]*)"([^=">]*)"([^=">]*")并替换为不太可靠的$1'$2'$3:> -
@WiktorStribiżew 非常感谢,效果很好!
-
@AlexK。不,并不总是像 img 这样的单个元素,也不总是相同的属性
标签: c# html regex replace html-agility-pack