.net 如何从URL中提取第一个文件夹?
我需要改进下面的方法 其思想是提取URL的第一个文件夹(如果存在)。URL可以通过域传递,也可以不通过域传递,也就是说,.net 如何从URL中提取第一个文件夹?,.net,regex,.net,Regex,我需要改进下面的方法 其思想是提取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[] urlSpli
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;
}
考虑使用类预解析Uri并使用LocalPath属性提取相对路径。然后使用String.split()。考虑使用类预解析Uri并使用LocalPath属性提取相对路径。然后使用String.split()
我想这应该是你想要的
这应该可以满足您的要求,我认为我同意Sergii Volchkov的观点,我认为使用System.Uri是正确的选择,但是您可能需要使用Path.GetParentDirectory()来代替string.split在本地路径上。我同意Sergii Volchkov的观点,我认为使用System.Uri是正确的方法,但您可能希望在本地路径上使用path.GetParentDirectory()。强制转换为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;
}
强制转换为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;
}
如果要使用正则表达式解决此问题(将问题标记为“regex”),请尝试以下方法:
public string ExtractURL(string url)
{
return Regex.Match(url, "(?<!/)/[^/?#]+").Value;
}
public string ExtractURL(string url)
{
Regex.Match(url, @"(\w*:(//[^/?#]+)?/)?(?<folder>[^/?#]+)").Groups["folder"].Value;
}
公共字符串提取url(字符串url)
{
返回Regex.Match(url,(?[^/?#]+))”.Groups[“folder”].Value;
}
如果您想用正则表达式解决这个问题(当您将问题标记为“regex”时),请尝试以下方法:
public string ExtractURL(string url)
{
return Regex.Match(url, "(?<!/)/[^/?#]+").Value;
}
public string ExtractURL(string url)
{
Regex.Match(url, @"(\w*:(//[^/?#]+)?/)?(?<folder>[^/?#]+)").Groups["folder"].Value;
}
公共字符串提取url(字符串url)
{
返回Regex.Match(url,(?[^/?#]+))”.Groups[“folder”].Value;
}
很抱歉,您不能将段用于相对URL,并且属性计数不存在,它是长度。重要的问题是第一个。添加一个相对路径的检查,你就是黄金。修正了这个例子来反映这一点。我认为不能将段用于相对URL。谢谢。这不再是一个相对Url,因为它是由webAddress=newURI(Request.Url,Url)生成的一个绝对Url;好的,这是真的,它是一个绝对的url,哎呀!,我更喜欢正则表达式解决方案,因为转换为绝对url来提取部分效率不高,但我指出这个答案,因为这是另一个非常好的方法。对不起,您不能将段用于相对url,并且属性计数不存在,它是长度。重要的问题是第一个。添加一个相对路径的检查,你就是黄金。修正了这个例子来反映这一点。我认为不能将段用于相对URL。谢谢。这不再是一个相对Url,因为它是由webAddress=newURI(Request.Url,Url)生成的一个绝对Url;好的,这是真的,它是一个绝对的url,哎呀!,我更喜欢正则表达式解决方案,因为转换为绝对url来提取一个部分效率不高,但我指出了这个答案,因为这是另一个非常好的方法。这个方法不存在,有Path.GetPathRoot,但它不起作用哦,对不起,我是说使用“GetDirectoryName()”。您可能需要多次使用此方法才能访问第一个文件夹。此方法不存在,有Path.GetPathRoot,但不起作用。哦,对不起,我是说使用“GetDirectoryName()”。您可能需要多次使用此方法才能访问第一个文件夹。您还没有说明现在使用的方法有什么问题。什么不起作用?这个想法是让一些东西更压缩,正则表达式总是好的。你还没有说你现在的方法有什么问题。什么不起作用?我们的想法是让某些东西更压缩,正则表达式总是很好