Ersetzen Sie doppelte Anführungszeichen durch doppelte Anführungszeichen

c# html html-agility-pack regex replace

Frage

Ich habe einige Fälle, in denen meine Klienten mir einen HTML-String mit einigen Elementen schicken, die nicht so richtig strukturiert sind. So was:

<img src="../imgTest.jpg" alt="Something "quoted here, or here"">

Wie kann ich diese Fälle dynamisch ändern?

<img src="../imgTest.jpg" alt="Something 'quoted here, or here'">

Ich brauche diesen HTML-Code nicht im Browser anzuzeigen, sondern einige Operationen damit zu machen.

Ich benutze HtmlAgilityPack, um HTML-Probleme zu steuern, aber für diese Fälle ändert es meine HTML-Zeichenfolge in diese und es ist nicht, was ich will:

<img src="../imgTest.jpg" alt="Something" quoted="" here,="" or="" here="">

Mein Code mit HtmlAgilityPack:

var htmlDoc = new HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.LoadHtml(myHtmlStr);

var htmlError = htmlDoc.ParseErrors.SafeAny();

if (!htmlError)
    myHtmlStr = htmlDoc.DocumentNode.InnerHtml;

Akzeptierte Antwort

Meine Idee ist aA passen " Â wenn es in einem Tag und ist kein Attribut qualifier.Â

HAFTUNGSAUSSCHLUSS: Diese Lösung funktioniert möglicherweise nicht in 100% Fällen (sie muss angepasst werden, wenn Namespaces zu Element- / Attributnamen hinzugefügt werden). Sie sollte jedoch funktionieren, wenn ein Tag-Name dem < unmittelbar folgt, doppelte Anführungszeichen werden als Attributwert-Qualifizierer verwendet und es gibt keine < Symbole in Attributen.

Benutzen

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

und ersetzen durch ' .

Siehe die Regex-Demo .

Der erste Lookbehind stellt sicher, dass wir nach einem doppelten Anführungszeichen suchen, das zweite fehlschlägt die Übereinstimmung, wenn ein Wort mit einem Gleichheitszeichen direkt vor dem doppelten Anführungszeichen folgt und das negative Lookahead die Übereinstimmung nicht erfüllt, wenn das doppelte Anführungszeichen folgt mit Whitespaces gefolgt von einer schließenden Klammer (wahrscheinlich mit dem Schrägstrich vorangestellt) oder wenn Whitespaces folgen gefolgt von einem Wort gefolgt von einem Gleichheitszeichen.



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum