Как я могу извлечь первую папку из URL? - PullRequest
1 голос
/ 31 июля 2009

Мне нужно улучшить метод ниже.

Идея состоит в том, чтобы извлечь первую папку 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;
}

Ответы [ 5 ]

2 голосов
/ 03 августа 2009

Если вы хотите решить это с помощью регулярного выражения (как вы отметили свой вопрос «регулярное выражение»), попробуйте это:

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

Это регулярное выражение работает для абсолютных URL-адресов и относительных URL-адресов, начинающихся с косой черты. Если он также должен работать с относительными URL-адресами без косой черты, попробуйте следующее:

public string ExtractURL(string url)
{
  Regex.Match(url, @"(\w*:(//[^/?#]+)?/)?(?<folder>[^/?#]+)").Groups["folder"].Value;
}
2 голосов
/ 31 июля 2009

Приведите к Ури, а затем используйте свойство Сегменты. Вы на самом деле захотите второй сегмент, потому что первый - это только ведущий слеш.

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;
}
0 голосов
/ 31 июля 2009
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 голосов
/ 31 июля 2009

Я согласен с Сергеем Волчковым и считаю, что использовать System.Uri - правильный путь, но вместо использования string.split вы можете использовать Path.GetParentDirectory () для локального пути.

0 голосов
/ 31 июля 2009

Подумайте об использовании класса System.Uri для предварительного анализа Uri и извлечения относительного пути с помощью свойства LocalPath. Затем используйте String.split ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...