Google 搜索引擎位置正则表达式
Google Search Engine Position Regex
目前我在 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/&sa=U&ved=0CBUQFjAAahUKEwi_koaWptjHAhXG8HIKHYcQCl0&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;
我遇到的错误是我总是得到“0”
上述正则表达式的问题是您忘记转义 ?
string lookup = "(<h3 class=\"r\"><a href=\"/url\?q=)(\w+[a-zA-Z0-9.\-?=/:]*)";
我不确定正则表达式 returns 是否符合您的要求,因为我无法从您的描述中理解您要匹配的内容。但可以肯定的是,未泄露的 "?"
是个问题。
这是一个带有 HtmlAgilityPack HTML parser 的选项(在解决方案中右键单击解决方案名称时,使用 Manage NuGet Packages for Solution 安装它探索者):
var html = "<h3 class=\"r\"><a href=\"/url?q=https://uk.yahoo.com/&sa=U&ved=0CBUQFjAAahUKEwi_koaWptjHAhXG8HIKHYcQCl0&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
中使用 URL 或 HTML 字符串,这将解析网页。
目前我在 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/&sa=U&ved=0CBUQFjAAahUKEwi_koaWptjHAhXG8HIKHYcQCl0&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;
我遇到的错误是我总是得到“0”
上述正则表达式的问题是您忘记转义 ?
string lookup = "(<h3 class=\"r\"><a href=\"/url\?q=)(\w+[a-zA-Z0-9.\-?=/:]*)";
我不确定正则表达式 returns 是否符合您的要求,因为我无法从您的描述中理解您要匹配的内容。但可以肯定的是,未泄露的 "?"
是个问题。
这是一个带有 HtmlAgilityPack HTML parser 的选项(在解决方案中右键单击解决方案名称时,使用 Manage NuGet Packages for Solution 安装它探索者):
var html = "<h3 class=\"r\"><a href=\"/url?q=https://uk.yahoo.com/&sa=U&ved=0CBUQFjAAahUKEwi_koaWptjHAhXG8HIKHYcQCl0&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
中使用 URL 或 HTML 字符串,这将解析网页。