gpt4 book ai didi

c# - 使用正则表达式提取数据 url

转载 作者:太空宇宙 更新时间:2023-11-03 21:32:24 26 4
gpt4 key购买 nike

我有网址

domain.com
domain.com/
www.domain.com
http://www.domain.com
http://domain.com
domain.com/catalog/nextcatalog/
domain.com/catalog/nextcatalog/page.html
domain.com/page.html
domain.com/page.html?arg=123&arg2=abc

我想获取这样的数据

[0] = domain.com
[1] = catalog/nextcatalog/
[2] = page.html
[3] = arg=123&arg2=abc

我不知道如何从这样的链接获取数据

domain.com

在那种情况下,在 [0] 我有 http:

如果不在链接中,是否可以创建可以跳过目录或页面的通用正则表达式?

我尝试创建这样的模式 ^(?:http:\/\/)?(?:www\.)?(.*?)(?=\/)(.*)(? =\/)(.*)$ 但这并不适用于所有情况

最佳答案

我建议您使用现有的 Uri提供对部分 uri 的轻松访问的类。您的示例列表中的某些网址没有方案,因此您只需手动添加即可:

Uri uri = new Uri(url.StartsWith("http") ? url : "http://" + url);

现在您可以使用 Uri.Host获取uri的主机。对于您,示例输入主机将是

"domain.com"
"domain.com"
"www.domain.com"
"www.domain.com"
"domain.com"
"domain.com"
"domain.com"
"domain.com"
"domain.com"

你可以做简单的字符串替换来去掉 www 部分:

uri.Host.Replace("www.", "")

接下来是查询参数。您可以从 Url.Query 获得它们.在您的示例输入中,只有一个 url 具有查询参数。返回值将是

?arg=123&arg2=abc

同样,摆脱开始 ? 很容易:

uri.Query.TrimStart('?') // arg=123&arg2=abc

Uri 还有Segments将包含段数组的集合。您可以检查最后一段是否包含 . 以获得下一个结果:

uri.Segments.Last().Contains('.') ? uri.Segments.Last() : ""

如果这是真的,那么您将在最后一段中得到 page.html。输出:

""
""
""
""
""
""
"page.html"
"page.html"
"page.html"

您还可以使用简单的 String.Join 将其他段连接成字符串。或者您可以在 Uri.LocalPath 上进行字符串替换:

uri.Segments.Last().Contains('.') ?
uri.LocalPath.Replace(uri.Segments.Last(), "") : uri.LocalPath;

输出:

""
""
""
""
""
"/catalog/nextcatalog/"
"/catalog/nextcatalog/"
"/"
"/"

您需要做的就是 TrimStart 来去除斜杠。

关于c# - 使用正则表达式提取数据 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23575207/

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