在C#应用中,我希望将每个HTML“font”标记与“color”属性匹配。
我有以下文字:
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?
感谢。
答案 0 :(得分: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>
嗯...很可爱。
答案 1 :(得分:0)
Matches m = Regex.Matches(result, "<font color=\"(.*?)\">(.*?)</font>");
//add a ? after the * and print the result .you will know how to get it.
答案 2 :(得分: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);
}