在“主页”之后提取URL的部分

时间:2019-01-03 13:11:38

标签: c# regex string substring

我需要提取网址“ URL”后的其余部分

例如URL可以是

https://www.example.com/site/country/home/products
https://www.example.com/site/country/home/products/consumer
https://www.example.com/site/country/home/products/consumer/kids

网址“国家/地区”中的关键字可能会更改。

我在输出中需要的是:

 /products 
 /products/consumer 
 /products/consumer/kids

我尝试过使用Regex,但在上述情况下无法正常工作

4 个答案:

答案 0 :(得分:1)

如Corion和David在评论中所建议的,在这种情况下,最简单的方法可能就是找到/home/的索引,然后将所有内容剥离到该点(而不是第二个/ ):

string home = "/home/";
int homeIndex = url.IndexOf(home);
string relativeUrl = url.Substring(homeIndex + home.Length - 1);

使用正则表达式,您要匹配/home/子字符串,并捕获第二个/及其后面的所有内容:

Match match = Regex.Match(url, @"/home(/.*)");
string relativeUrl = "/";
if (match.Success) {
    relativeUrl = match.Groups[1].Value;
}

答案 1 :(得分:0)

使用正则表达式很容易。请使用以下正则表达式并测试您的方案。很好。

正则表达式:'(?<=\/home).*\b'

回家前无需担心前部。到家后,便会一言不发。

答案 2 :(得分:0)

它是如此简单的C#代码,我认为它可能对您有帮助

string sub = "https://www.example.com/site/country/home/products";
        string temp = "";
        string[] ss = sub.Split('/');
        for(int i = 0; i < sub.Length; i++)
        {
            if (ss[i] == "home")
            {
                i++;
                for (int j = i; j < ss.Length; j++)
                    temp +='/'+ ss[j];

                break;
            }

        }
        Console.WriteLine(temp);

答案 3 :(得分:0)

您可以使用System.Uri类提取URL的段:

Uri link = new Uri("https://www.example.com/site/country/home/products/consumer/kids");
string[] segs = link.Segments;

int idxOfHome = Array.IndexOf(segs, "home/");

string restOfUrl = string.Join("", segs, idxOfHome+1, segs.Length  - (idxOfHome + 1));

产量:

  

产品/消费者/孩子