我会使用解析器来解析 HTML,如HtmlAgilityPack,并使用正则表达式来查找color
属性中的值。
首先,使用 xpath查找包含style
其中定义的属性的所有节点:color
var doc = new HtmlDocument();
doc.LoadHtml(html);
var nodes = doc.DocumentNode
.SelectNodes("//*[contains(@style, 'color')]")
.ToArray();
然后是匹配颜色值的最简单的正则表达式:(?<=color:\s*)#?\w+
.
var colorRegex = new Regex(@"(?<=color:\s*)#?\w+", RegexOptions.IgnoreCase);
然后遍历这些节点,如果存在正则表达式匹配,则将节点的内部 html 替换为 html 编码的标签(稍后您会明白为什么):
foreach (var node in nodes)
{
var style = node.Attributes["style"].Value;
if (colorRegex.IsMatch(style))
{
var color = colorRegex.Match(style).Value;
node.InnerHtml =
HttpUtility.HtmlEncode("<" + color + ">") +
node.InnerHtml +
HttpUtility.HtmlEncode("</" + color + ">");
}
}
最后获取文档的内部文本并对其进行html解码(这是因为内部文本剥离了所有标签):
var txt = HttpUtility.HtmlDecode(doc.DocumentNode.InnerText);
这应该返回如下内容:
This is a sample html text.
<#ff9999>this is only a sample</#ff9999>
....
and some other tags...
当然,您可以根据自己的需要对其进行改进。