我需要改进下面的方法。
想法是提取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 :(得分: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;
}
答案 1 :(得分:2)
如果你想用正则表达式解决这个问题(当你标记你的问题“正则表达式”时),试试这个:
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 :(得分:0)
考虑使用System.Uri类预先解析Uri并使用LocalPath属性提取相对路径。然后使用String.split()。
答案 3 :(得分: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;
}
那应该做你想要的我认为
答案 4 :(得分:0)
我同意Sergii Volchkov,我认为使用System.Uri是正确的方法,但是你可能想在本地路径上使用Path.GetParentDirectory()而不是使用string.split。