gpt4 book ai didi

c# - 用于删除重复 URL 的正则表达式

转载 作者:行者123 更新时间:2023-11-30 17:07:28 25 4
gpt4 key购买 nike

我有一个列表,其中包含一组 URL,类似于

  1. somesite.com/index.php?id=12
  2. somesite.com/index.php?id=14
  3. somesite.com/index.php?id=156
  4. example.com/view.php?image=441
  5. somesite.com/page.php?id=1
  6. example.com/view.php?ivideo=4
  7. somesite.com/page.php?id=56
  8. example.com/view.php?image=1

这些被存储到列表中,然后在爬行过程后显示在 ListView 中。我尝试了不同的正则表达式模式,但仍然无法存档我真正需要的内容,因为查询字符串成了问题。

这是我尝试过的模式之一。

(http://?)(w*)(\.*)(\w*)(\.)(\w*)

让我写下我需要如何过滤上述 URL。

  1. somesite.com/index.php?id=12
  2. example.com/view.php?image=441
  3. somesite.com/page.php?id=1
  4. example.com/view.php?ivideo=4

如您所见,相同但具有不同查询字符串的页面已被删除。这就是我要存档的内容。请注意,上面的链接确实包含 http:// 但没有包含它们,因为 SOF 发现它们是垃圾邮件。任何人都可以帮助我解决这个问题。提前致谢。

最佳答案

无需手动解析 Url,您可以使用 Uri类和 HttpUtility.ParseQueryString做解析。这是一个使用 LINQ .GroupBy 的示例方法将相似的 url 收集到组中,然后从组中选择第一个 url。

var distinctUrls = urls.GroupBy (u =>
{
var uri = new Uri(u);
var query = HttpUtility.ParseQueryString(uri.Query);
var baseUri = uri.Scheme + "://" + uri.Host + uri.AbsolutePath;
return new {
Uri = baseUri,
QueryStringKeys = string.Join("&", query.AllKeys.OrderBy (ak => ak))
};
})
.Select (g => g.First())
.ToList();

distinctUrls 的示例输出:

http://somesite.com/index.php?id=12
http://example.com/view.php?image=441
http://somesite.com/page.php?id=1
http://example.com/view.php?ivideo=4

这也将正确处理两个 url 具有相同的查询字符串参数集但顺序不同的情况,例如 example.com/view.php?image=441&order=ascexample.com/view.php?order=desc&image=441 - 将它们视为相似。

关于c# - 用于删除重复 URL 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14507155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com