Reemplazar tags HTML específicas usando Regex

Muy bien, uno fácil para ustedes chicos. Estamos utilizando el RichTextBox de ActiveReport para mostrar algunos bits aleatorios de código HTML.

Las tags HTML compatibles con ActiveReport se pueden encontrar aquí: http://www.datadynamics.com/Help/ARNET3/ar3conSupportedHtmlTagsInRichText.html

Un ejemplo de lo que quiero hacer es reemplazar cualquier coincidencia de <div style="text-align:*

por <p style=\"text-align:*

para usar una etiqueta compatible para la alineación de texto.

He encontrado la siguiente expresión de expresiones regulares para encontrar la coincidencia correcta en mi entrada html:

 <div style=\"text-align:(.*?)

Sin embargo, no puedo encontrar una forma de mantener el texto anterior en las tags después de mi reemplazo. ¿Cualquier pista? ¿Soy yo o Regex somos generalmente un PITA? 🙂

  private static readonly IDictionary _replaceMap = new Dictionary { {"<div style=\"text-align:(.*?)
", "<p style=\"text-align:(.*?)

"} }; public static string FormatHtml(string html) { foreach(var pair in _replaceMap) { html = Regex.Replace(html, pair.Key, pair.Value); } return html; }

¡Gracias!

Use $1 :

 {"
", "

"}

Tenga en cuenta que puede simplificar esto para:

 {"
", "

"}

También es generalmente una mejor idea usar un analizador de HTML como HtmlAgilityPack que tratar de analizar HTML utilizando expresiones regulares. He aquí cómo puedes hacerlo:

 HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); foreach (var e in doc.DocumentNode.Descendants("div")) e.Name = "p"; doc.Save(Console.Out); 

Resultado:

 

foo

barra

En lugar de usar expresiones regulares, debe usar una herramienta que sea más adecuada para analizar y modificar html. Recomendaría Html Agility Pack para esto: fue escrito para hacer exactamente lo que necesita.