替换双引号内的双引号 html 属性
Replace double quotes inside double quotes html attribute
在某些情况下,我的客户会向我发送一个 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;
我的想法是匹配 "
如果它在标签内并且不是属性限定符。
免责声明:此解决方案可能无法在 100% 的情况下工作(如果将名称空间添加到 element/attribute 名称,则需要进行调整),但当标签名称跟随 <
立即,双引号用作属性值限定符,并且属性内部没有 <
符号。
使用
(?<=<\w+\b[^<]*)(?<!\w+=)"(?!\s*/?>|\s+\w+=")
并替换为 '
。
参见regex demo。
第一个 lookbehind 确保我们在标签中搜索双引号,如果双引号之前有一个单词后跟一个等号,则第二个 lookbehind 匹配失败,如果是,否定 lookahead 匹配失败双引号后跟空格,后跟右尖括号(可能前面有正斜杠),或者当空格后跟单词后跟等号时。
在某些情况下,我的客户会向我发送一个 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;
我的想法是匹配 "
如果它在标签内并且不是属性限定符。
免责声明:此解决方案可能无法在 100% 的情况下工作(如果将名称空间添加到 element/attribute 名称,则需要进行调整),但当标签名称跟随 <
立即,双引号用作属性值限定符,并且属性内部没有 <
符号。
使用
(?<=<\w+\b[^<]*)(?<!\w+=)"(?!\s*/?>|\s+\w+=")
并替换为 '
。
参见regex demo。
第一个 lookbehind 确保我们在标签中搜索双引号,如果双引号之前有一个单词后跟一个等号,则第二个 lookbehind 匹配失败,如果是,否定 lookahead 匹配失败双引号后跟空格,后跟右尖括号(可能前面有正斜杠),或者当空格后跟单词后跟等号时。