好吧,对你们来说很简单。我们使用ActiveReport的RichTextBox来显示一些随机的HTML代码。
可以在此处找到ActiveReport支持的HTML标记:http://www.datadynamics.com/Help/ARNET3/ar3conSupportedHtmlTagsInRichText.html
我想要做的一个示例是将<div style="text-align:*</div>
的所有匹配项替换为<p style=\"text-align:*</p>
,以便使用支持的标记进行文本对齐。
我找到了以下正则表达式,以便在我的html输入中找到正确的匹配项:
<div style=\"text-align:(.*?)</div>
但是,我无法找到一种方法来在替换后保留标签中包含的先前文本。任何线索?是我还是Regex一般都是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;
}
谢谢!
答案 0 :(得分:4)
使用$1
:
{"<div style=\"text-align:(.*?)</div>", "<p style=\"text-align:$1</p>"}
请注意,您可以将其简化为:
{"<div (style=\"text-align:(?:.*?))</div>", "<p $1</p>"}
使用像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);
结果:
<p style="text-align:center">foo</p><p style="text-align:center">bar</p>
答案 1 :(得分:3)
您应该使用更适合解析和修改html的工具,而不是使用正则表达式。我会为此推荐Html Agility Pack - 它是为了满足您的需要而编写的。