Reemplace las comillas dobles dentro del atributo html de comillas dobles

c# html html-agility-pack regex replace

Pregunta

Tengo algunos casos en los que mis clientes me envían una cadena html con algunos elementos que no están estructurados correctamente. Me gusta esto:

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

¿Cómo puedo cambiar dinámicamente estos casos a algo como esto a continuación?

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

Necesito este html para no mostrarlo en el navegador, sino para realizar algunas operaciones con él.

Estoy usando HtmlAgilityPack para controlar los problemas de html pero para estos casos cambia mi cadena html a esto y no es lo que quiero:

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

Mi código con HtmlAgilityPack:

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

var htmlError = htmlDoc.ParseErrors.SafeAny();

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

Respuesta aceptada

Mi idea es hacer coincidir a " si está dentro de una etiqueta y no es un calificador de atributo".

DESCARGO DE RESPONSABILIDAD: Esta solución podría no funcionar en casos de 100% (necesitará adaptación en caso de que se agreguen espacios de nombres a los nombres de elementos / atributos), pero debería funcionar cuando el nombre de una etiqueta sigue a las < comillas dobles inmediatamente. , y no hay < símbolos dentro de los atributos.

Utilizar

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

y reemplazar con ' .

Ver la demo regex .

El primer vistazo se asegura de que estemos buscando una comilla doble en una etiqueta, el segundo falla la coincidencia si hay una palabra seguida con un signo igual justo antes de la comilla doble, y el lookahead negativo falla la coincidencia si se sigue la comilla doble con espacios en blanco seguidos con un corchete de ángulo de cierre (probablemente precedido por una barra inclinada) o cuando hay espacios en blanco seguidos con una palabra seguida de un signo igual.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow