0

在 C# 应用程序中,我想将每个 HTML“字体”标签与“颜色”属性匹配。

我有以下文字:

1<font color="red">2<font color="blue">3</font>4</font>56

我想要一个包含以下项目的 MatchCollection:

[0] <font color="red">234</font>
[1] <font color="blue">3</font>

但是当我使用这段代码时:

Regex.Matches(result, "<font color=\"(.*)\">(.*)</font>");

我得到的 MatchCollection 如下:

[0] <font color="red">2<font color="blue">3</font>4</font>

如何使用 C# 获得我想要的 MatchCollection?

谢谢。

4

3 回答 3

1

“HTML”上的正则表达式是一种反模式。只是不要这样做。

为了引导你走上正确的道路,看看你可以用HTML Agility Pack做什么:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"1<font color=""red"">2<font color=""blue"">3</font>4</font>56");
var fontElements = doc.DocumentNode.Descendants("font");
var newNodes = fontElements.Select(fe => {
    var newNode = fe.Clone();
    newNode.InnerHtml = fe.InnerText;
    return newNode;
});
var collection = newNodes.Select(n => n.OuterHtml);

现在,collection我们有以下字符串:

<font color="red">234</font> 
<font color="blue">3</font> 

嗯……可爱。

于 2013-07-18T00:04:26.597 回答
0

一种使用 Html Agility Pack 和 XPath 查询来确保颜色属性存在的方法:

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
String html = "1<font color=\"red\">2<font color=\"blue\">3</font>4</font>56";
htmlDoc.LoadHtml(html);
HtmlNodeCollection fontTags = htmlDoc.DocumentNode.SelectNodes(".//font[@color]");
foreach (HtmlNode fontTag in fontTags)
{
    Console.WriteLine(fontTag.InnerText);
}
于 2013-07-18T01:35:48.943 回答
0
Matches m = Regex.Matches(result, "<font color=\"(.*?)\">(.*?)</font>");
//add a ? after the * and print the result .you will know how to get it.
于 2013-07-17T23:53:56.720 回答