在雙引號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