2009-07-31 49 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; 
} 
相關問題