【问题标题】:Get the last path of URL获取 URL 的最后路径
【发布时间】:2014-02-18 08:22:14
【问题描述】:

我正在使用以下代码,该代码对于大多数服务都可以正常工作,但在 URL 中的某个时间,我最后得到了 User;v=2;mp,我只需要 User;v=2;mp strong>用户,我该如何处理? 我需要一些通用的解决方案,因为我猜在其他一些 URL 中我可以获得不同的空间章程

如果网址

https://ldmrrt.ct/odata/GBSRM/User;v=2;mp
string serviceName = _uri.Segments.LastOrDefault();

如果 URL 是 https://ldmrrt.ct/odata/GBSRM/User 它工作正常...

【问题讨论】:

    标签: c# regex uri


    【解决方案1】:

    只需替换:

    string serviceName = _uri.Segments.LastOrDefault();
    

    与:

    string serviceName = _uri.Segments.LastOrDefault().Split(new[]{';'}).First();
    

    如果您需要更灵活的东西,您可以在其中指定要包含或跳过的字符,您可以这样做(有点混乱,您可能应该将其中的一部分提取为单独的变量等):

    // Note the _ and - characters in this example:
    Uri _uri = new Uri("https://ldmrrt.ct/odata/GBSRM/User_ex1-ex2;v=2;mp");
    
    // This will return a string: "User_ex1-ex2"
    string serviceName =
            new string(_uri.Segments
                              .LastOrDefault()
                              .TakeWhile(c => Char.IsLetterOrDigit(c)
                                              || (new char[]{'_', '-'}).Contains(c))
                              .ToArray());
    

    更新,以回应我理解的以下问题:):

    您可以为此使用String.Replace(),或者您可以通过执行以下操作来使用过滤:

    // Will return: "Userexex2v=2mp"
    string serviceName = 
                 new string(_uri.Segments
                                .LastOrDefault()       
                                .Where(c => 
                                        !Char.IsPunctuation(c) // Ignore punctuation
                                        // ..and ignore any "_" or "-":
                                        && !(new char[]{'_', '-'}).Contains(c)) 
                                 .ToArray());
    

    如果您在生产中使用它,请注意,一定要稍微清理一下,例如通过拆分成几个变量,并在使用前定义你的 char[]-array。

    【讨论】:

    • HI Kjartah,谢谢投票,有一种方法可以添加一些通用解决方案,例如,如果我在 URL 中有其他字符来省略它们,就像在这种情况下“;”
    • HI Kjartah,当我使用我提供的链接时,我在服务名称 Userexex2v=2mp 中获得的更新代码,我怎样才能只获得用户?:)
    • @JeanTehhe 您可以通过更改where( c => xyz) 中的代码来根据需要进行调整。在此处使用 xyz 所需的任何内容,例如 Char.IsLetterOrDigit(c) 仅允许数字和字母等字符 (c)。您可以将其与第一个示例或您可能需要的任何其他内容结合使用。
    • 请注意,第一个示例截断了“;”之后的所有内容,而第二个示例仅过滤掉字符,具体取决于您是否允许。如果您需要走那么远,您应该可以使用Where(...).TakeWhile(...).ToArray() 将两者结合起来。
    • 不幸的是,相对 URI 失败了。
    【解决方案2】:

    在您的情况下,您可以尝试拆分 "User;v=2;mp" 字符串。

    string [] split = words.Split(new Char [] { ';' });
    

    返回一个字符串数组,其中包含此实例中由指定 Unicode 字符数组的元素分隔的子字符串。

    split.First();
    

    或:

    split[0];
    

    【讨论】:

      猜你喜欢
      • 2019-07-24
      • 2012-11-30
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      • 2011-05-28
      相关资源
      最近更新 更多