Google搜索引擎排名正则表达式

时间:2015-09-02 12:18:58

标签: c# regex google-search

目前我在C#中的正则表达式是

string lookup = "(<h3 class=\"r\"><a href=\"/url?q=)(\\w+[a-zA-Z0-9.\\-?=/:]*)";

我正在尝试匹配Google搜索引擎位置结果,如下所示

<h3 class="r"><a href="/url?q=https://uk.yahoo.com/&amp;sa=U&amp;ved=0CBUQFjAAahUKEwi_koaWptjHAhXG8HIKHYcQCl0&amp;usg=AFQjCNHkhixstCvIO45GIKI44_kp6ul36w">

此代码功能更详细

string lookup = "(<h3 class=\"r\"><a href=\"/url?q=)(\\w+[a-zA-Z0-9.\\-?=/:]*)";
            MatchCollection matches = Regex.Matches(html, lookup);

            for (int i = 0; i < matches.Count; i++)
            {
                string match = matches[i].Groups[2].Value;
                if (match.Contains(url.Host))
                    return i + 1;
            }

            return 0;

我遇到的错误是我总是得到&#34; 0&#34;

2 个答案:

答案 0 :(得分:3)

上面的正则表达式的问题是你忘了逃避?

string lookup = "(<h3 class=\"r\"><a href=\"/url\\?q=)(\\w+[a-zA-Z0-9.\\-?=/:]*)";

我不确定正则表达式是否会返回您想要的内容,因为我无法从您的描述中了解您要匹配的内容。但肯定没有问题"?"是一个问题。

答案 1 :(得分:0)

以下是HtmlAgilityPack HTML parser的选项(在解决方案资源管理器中右键单击解决方案名称时,从下拉菜单中使用管理NuGet包解决方案安装它):

var html = "<h3 class=\"r\"><a href=\"/url?q=https://uk.yahoo.com/&amp;sa=U&amp;ved=0CBUQFjAAahUKEwi_koaWptjHAhXG8HIKHYcQCl0&amp;usg=AFQjCNHkhixstCvIO45GIKI44_kp6ul36w\">";
var tags_with_attributes = new List<KeyValuePair<string, List<KeyValuePair<string, string>>>>();
var kvp = new KeyValuePair<string, List<KeyValuePair<string, string>>>();
HtmlAgilityPack.HtmlDocument hap;
Uri uriResult;
if (Uri.TryCreate(html, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp)
{ // html is a URL 
   var doc = new HtmlAgilityPack.HtmlWeb();
   hap = doc.Load(uriResult.AbsoluteUri);
}
else
{ // html is a string
   hap = new HtmlAgilityPack.HtmlDocument();
   hap.LoadHtml(html);
}
var nodes = hap.DocumentNode.SelectNodes("//h3/a[@href]");
if (nodes != null)
{
   foreach (var node in nodes)
   {
       foreach (var attribute in node.Attributes)
          if (attribute.Name == "href" && attribute.Value.StartsWith("/url?q="))
            Console.WriteLine(attribute.Value.Substring(7));
    }
}

如果使用html中的网址或HTML字符串,则会解析网页。