使用Regex替换特定的HTML标记

好吧,对你们来说很容易。 我们使用ActiveReport的RichTextBox来显示一些随机的HTML代码。

ActiveReport支持的HTML标记可以在这里找到: http : //www.datadynamics.com/Help/ARNET3/ar3conSupportedHtmlTagsInRichText.html

我想要做的一个例子是用<p style=\"text-align:*

替换<div style="text-align:*

的任何匹配,以便使用支持的标签用于文本对齐。

我发现以下正则表达式在我的html输入中找到正确的匹配:

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

但是,我无法找到一种方法来在替换后保留标签中包含的先前文本。 任何线索? 是我还是Regex一般都是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; }

谢谢!

使用$1

 {"
", "

"}

请注意,您可以将其简化为:

 {"
", "

"}

另外,使用像HtmlAgilityPack这样的HTML解析器通常比尝试使用正则表达式解析HTML更好。 这是你如何做到的:

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

结果:

 

foo

bar

您应该使用更适合解析和修改html的工具,而不是使用正则表达式。 我会为此推荐Html Agility Pack – 它是为了满足您的需求而编写的。

Interesting Posts