Reputation: 6291
Alright, an easy one for you guys. We are using ActiveReport's RichTextBox to display some random bits of HTML code.
The HTML tags supported by ActiveReport can be found here : http://www.datadynamics.com/Help/ARNET3/ar3conSupportedHtmlTagsInRichText.html
An example of what I want to do is replace any match of <div style="text-align:*</div>
by <p style=\"text-align:*</p>
in order to use a supported tag for text-alignment.
I have found the following regex expression to find the correct match in my html input:
<div style=\"text-align:(.*?)</div>
However, I can't find a way to keep the previous text contained in the tags after my replacement. Any clue? Is it me or Regex are generally a PITA? :)
private static readonly IDictionary<string, string> _replaceMap =
new Dictionary<string, string>
{
{"<div style=\"text-align:(.*?)</div>", "<p style=\"text-align:(.*?)</p>"}
};
public static string FormatHtml(string html)
{
foreach(var pair in _replaceMap)
{
html = Regex.Replace(html, pair.Key, pair.Value);
}
return html;
}
Thanks!
Upvotes: 2
Views: 3719
Reputation: 839144
Use $1
:
{"<div style=\"text-align:(.*?)</div>", "<p style=\"text-align:$1</p>"}
Note that you could simplify this to:
{"<div (style=\"text-align:(?:.*?))</div>", "<p $1</p>"}
Also it is generally a better idea to use an HTML parser like HtmlAgilityPack than trying to parse HTML using regular expressions. Here's how you could do it:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
foreach (var e in doc.DocumentNode.Descendants("div"))
e.Name = "p";
doc.Save(Console.Out);
Result:
<p style="text-align:center">foo</p><p style="text-align:center">bar</p>
Upvotes: 4
Reputation: 36340
Instead of using regex'es you should use a tool that is more suited to parse and modify html. I would recommend the Html Agility Pack for this - it was written to do just what you need.
Upvotes: 3