在双引号html属性中替换双引号

c# html html-agility-pack regex replace

在某些情况下,我的客户向我发送了一个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字符串更改为this并且它不是我想要的:

<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%的情况下工作(如果在元素/属性名称中添加了名称空间,则需要进行调整),但是当标签名称跟在<立即,双引号用作属性值限定符后,它应该有效,内部属性没有<符号。

使用

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

并用'代替。

请参阅正则表达式演示

第一个lookbehind确保我们在标签内搜索双引号,如果在双引号之前有一个跟随等号的单词,则第二个看不到匹配,如果遵循双引号,则负向前瞻不匹配使用空格后跟一个右尖括号(可能以正斜杠开头)或当有空格后跟一个后跟等号的单词。



Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow