替换双引号 html 属性内的双引号

本文关键字:html 替换 属性 | 更新日期: 2023-09-27 18:36:55

在某些情况下,我的客户向我发送了一个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;

替换双引号 html 属性内的双引号

我的想法是匹配",如果它位于标签内并且不是属性限定符。

免责声明:此解决方案可能无法在 100% 的情况下工作(如果将命名空间添加到元素/属性名称,则需要进行调整),但当标签名称紧跟在<后面,双引号用作属性值限定符,并且属性中没有<符号时,它应该可以工作。

(?<=<'w+'b[^<]*)(?<!'w+=)"(?!'s*/?>|'s+'w+=")

并替换为 ' .

请参阅正则表达式演示。

第一个后看确保我们搜索的是双引号和标签,如果双引号前跟一个等号的单词,则第二个回溯失败,如果双引号后跟空格后跟右尖括号(可能前面有正斜杠)或有空格后跟一个单词后跟一个等号标志。