2009-07-31 50 views
1

我需要改进下面的方法。如何从URL中提取第一个文件夹?

这个想法是提取一个URL的第一个文件夹,如果它存在。这些网址可以带有或不带有域,也就是说,http://www.examplecom/es/test/test.aspx,http://example.com/es/test/或简称为/us/xxx/xxx.aspx

public string ExtractURL(string url) 
{ 
    string result = ""; 
    try 
    { 
     string[] urlSplitted = url.Split("//".ToCharArray()); 
     //si encontramos/
     if (urlSplitted.Length > 0) 
     { 
      string strFin = urlSplitted[urlSplitted.GetUpperBound(0) - 1]; 
      //comprobamos que exista algo 
      if (String.IsNullOrEmpty(strFin)) 
      { 
       result = url; 
      } 
      else 
      { 
       //devuelvo la url hasta /ES o /EN 
       result = url.Substring(0,url.ToLower().IndexOf("/" +strFin.ToLower())); 
      } 
     } 
     else 
     { 
      result = url; 
     } 
    } 
    catch 
    { 
     result = ""; 
    } 
    return result; 
} 
+0

您还没有说过现在的方法有什么问题。什么不起作用? – TRiG 2013-11-26 18:11:24

+0

想法是有更多的压缩,正则表达式总是很好 – netadictos 2013-11-26 22:10:29

回答

2

如果你想用正则表达式来解决这个问题(如你标记你的问题“正则表达式”),试试这个:

public string ExtractURL(string url) 
{ 
    return Regex.Match(url, "(?<!/)/[^/?#]+").Value; 
} 

此正则表达式适用于绝对URL,并在相对网址以斜线开始。如果它还需要在没有斜杠的情况下使用相对URL,请尝试以下操作:

public string ExtractURL(string url) 
{ 
    Regex.Match(url, @"(\w*:(//[^/?#]+)?/)?(?<folder>[^/?#]+)").Groups["folder"].Value; 
} 
0

考虑使用System.Uri类预解析URI和提取与属性局部路径的相对路径。然后使用String.split()。

0
public string ExtractURL(string URL) 
    { 
     string result = ""; 
     try 
     { 
      httpindex = URL.ToLower().IndexOf("http://"); 
      if (httpindex > 0) 
      { 
       URL = URL.Substring(0, 6); 
      } 
      URL = URL.ToLower().TrimStart("http://".ToCharArray()); 
      string[] urlArray = URL.Split('/'); 
      if (urlArray.Length > 1) 
      { 
        result = urlArray[1]; 
      } 
     } 
     catch 
     { 
      result = ""; 
     } 
     return result; 
    } 

这应该做你想要什么,我认为

0

我同意谢尔盖·Volchkov,我想使用的System.Uri是去,但不是使用string.split您可能希望使用路径的正确方法.GetParentDirectory()在本地路径上。

+0

此方法不存在,有Path.GetPathRoot但它不起作用 – netadictos 2009-07-31 10:08:00

+0

哎呀对不起,我的意思是使用“GetDirectoryName()”。您可能必须多次使用此方法才能到达第一个文件夹。 – 2009-07-31 13:26:58

2

投射到Uri,然后使用Segments属性。实际上你会想要第二个细分市场,因为第一个只是领先的斜线。

public string ExtractURL(string url) 
{ 
    Uri webAddress = null; 
    string firstFolder = null; 
    if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out webAddress)) 
    { 
     if (!webAddress.IsAbsoluteUri) 
     { 
      webAddress = new Uri(Request.Url, url); 
     } 
     if (webAddress.Segments.Length >= 2) 
     { 
      firstFolder = webAddress.Segments[1]; 
     } 
    } 
    return firstFolder; 
} 
相关问题