Remplacer les guillemets doubles dans l'attribut html des guillemets doubles

c# html html-agility-pack regex replace

Question

Dans certains cas, mes clients m'envoient une chaîne html avec des attributs d'éléments mal structurés. Comme ça:

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

Comment puis-je changer dynamiquement ces cas en quelque chose comme ça?

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

J'ai besoin de ce code HTML pour ne pas apparaître sur le navigateur, mais pour faire quelques opérations avec.

J'utilise HtmlAgilityPack pour contrôler les problèmes html, mais dans ces cas, ma chaîne html est modifiée en ceci et ce n'est pas ce que je veux:

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

Mon code avec HtmlAgilityPack:

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

Réponse acceptée

Mon idée est de faire correspondre un " s'il est à l'intérieur d'une balise et n'est pas un qualificatif d'attribut."

AVERTISSEMENT: Cette solution peut ne pas fonctionner dans 100% des cas (elle nécessitera une adaptation au cas où des espaces de noms seraient ajoutés aux noms d'élément / d'attribut), mais devrait fonctionner lorsqu'un nom de balise suit immédiatement < , les guillemets doubles sont utilisés comme qualificatifs de valeur d'attribut. , et il n'y a pas de < symboles dans les attributs.

Utilisation

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

et remplacez ' .

Voir la démo regex .

Le premier lookbehind garantit que nous recherchons une double citation pour insérer une balise, le second échoue si un mot est suivi du signe égal juste avant la double citation, et la recherche négative annule la correspondance si la double citation est suivie. avec des espaces suivis d'un angle fermé (probablement précédés de la barre oblique) ou lorsqu'il y a des espaces suivis d'un mot suivi d'un signe égal.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi