我有一个要求,我只需要从这个HTML
获取链接"<span class=""name""><a href=Details.aspx?entityID=1&hash=20&searchFunctionID=53b&type=Advanced&nameSet=Entities&q=a&textSearchType=ExactPhrase&orgTypes=01%2c02%2c03%2c04%2c05%2c06%2c07%2c08%2c09%2c10%2c11%2c12%2c13%2c14%2c15%2c16%2c90%2c96%2c98%2c99> GOOGLE CORPORATION </a> </span> <br /> <span class=typeDescription> 09 - Analytics Company </span>"
我需要的输出是
Details.aspx?entityID=1&hash=20&searchFunctionID=53b&type=Advanced&nameSet=Entities&q=a&textSearchType=ExactPhrase&orgTypes=01%2c02%2c03%2c04%2c05%2c06%2c07%2c08%2c09%2c10%2c11%2c12%2c13%2c14%2c15%2c16%2c90%2c96%2c98%2c99
我用过
string sPattern ="[<a href=](.*?(99))";
MatchCollection mcMatches = Regex.Matches(input,sPattern);
foreach (Match m in mcMatches)
{
Console.WriteLine(m.Value);
}
这不是给我正确的输出。任何人都可以指出我正确的方向。
答案 0 :(得分:6)
如上所述,使用Regex解析HTML为not very good idea。我建议你使用HtmlAgilityPack(你可以从NuGet获得):
HtmlDocument hdoc = new HtmlDocument();
hdoc.LoadHtml(@"<span class=""name""><a href=Details.aspx?entityID=1&hash=20&searchFunctionID=53b&type=Advanced&nameSet=Entities&q=a&textSearchType=ExactPhrase&orgTypes=01%2c02%2c03%2c04%2c05%2c06%2c07%2c08%2c09%2c10%2c11%2c12%2c13%2c14%2c15%2c16%2c90%2c96%2c98%2c99> GOOGLE CORPORATION </a> </span> <br /> <span class=typeDescription> 09 - Analytics Company </span>");
var href = hdoc.DocumentNode.SelectSingleNode("//a").Attributes["href"].Value;
它为您提供href
属性的值。
答案 1 :(得分:0)
正如Shaamaan所说,正则表达式不是解析HTML的正确方法,对于你给出的例子,一个更好的正则表达式,虽然不能保证它总会有效:
(?:<a href=)([^">]*)