获取URL(字符串)并从中获取所需的值

时间:2015-12-29 15:42:39

标签: c# substring

我目前正在开发一个应用程序,它将为决定加入组的任何用户创建一个新文件夹。我目前正在接收一个URL,并且需要输出某些部分才能保留用户名。对于我们公司中的所有用户,此URL将始终相同,唯一更改的是将进入“个人/”的用户名。名称随着不同的用户而变化,我需要的只是名字和姓氏。

For example    

string url = "https://dhgdev-my.sharepoint.com/personal/john_dough_dhgdev_com";

string name = \\ looking to cut off john_dough only* and leave out "_com" 

oneDrive.CreateNewOneDriveFolder("testthis"+ name); \\ creating a new folder and concatenating the name revived from URL

5 个答案:

答案 0 :(得分:3)

https://dhgdev-my.sharepoint.com/personal”和“_dhgdev_com”是否已修复?如果是,您可以按如下方式删除固定部分:

var url = "https://dhgdev-my.sharepoint.com/personal/john_dough_dhgdev_com";
var name = url.Replace("https://dhgdev-my.sharepoint.com/personal/", string.Empty).Replace("_dhgdev_com", string.Empty);

注意:这是一个例子(我不喜欢使用嵌套方法调用)。

答案 1 :(得分:1)

您可以从该字符串创建一个Uri,并从Segments中读取所需的值

tellg()

修改
查看修改后的问题,似乎您还要删除最后一个段中的最后两个子字符串。在这种情况下,在获得Uri的最后一段之后,您可以继续进行简单的字符串操作

string url = "https://dhgdev-my.sharepoint.com/personal/john_dough_dhgdev_com";
Uri uri = new Uri(url);
Console.WriteLine(uri.Segments[uri.Segments.Length-1]);

当然,如果您只需删除string name = uri.Segments[uri.Segments.Length-1]; string[] parts = name.Split('_'); // a bit of checks on the parts length is required here if(parts.Length > 2) name = string.Join("_", parts.Take(parts.Length - 2)); 部分,则应调整上面使用的常量2.

答案 2 :(得分:1)

如果始终是您网址的最后一部分,您可以这样做:

string name= url.Split('/').Last();

此外,如果您需要特定细分,您也可以这样做:

var name=new Uri(url).Segments.Last();

更新

如果您不知道哪个细分可能是用户名,您可以尝试使用此解决方案;

int index = url.LastIndexOf("/personal/");
string rhs = url.Substring(index + 10);
var userNameSegment=rhs.Split('_');
var userName = userNameSegment[0] +"_"+userNameSegment[1];

如果网址总是具有相同的结构且用户名在最后一个网段中,那么请使用我上面提出的两个解决方案中的一个来获取最后一个网段并应用相同的操作来获取用户名。

答案 3 :(得分:0)

您可以使用Regex获取名称:

string pattern = @"^.*\/(!?.*\/)(.*)$";
string input = "https://dhgdev-my.sharepoint.com/personal/john_dough_dhgdev_com";
var match = Regex.Match(input, pattern);

然后从表达式中的组中提取名称:

match.Groups[1]; //Equal to "john_dough_dhgdev_com"

但是,如果您希望仅匹配包含"个人"在列出用户名之前,您可能希望使用^.*\/(!?.*\/)personal\/(.*)$作为正则表达式。

(我使用Visual Studio远离计算机,因此无法对其进行测试)

答案 4 :(得分:0)

除正则表达式之外最简单的方法可能是:

        var url = "https://dhgdev-my.sharepoint.com/personal/john_dough_dhgdev_com";
        var extractname = url.Replace("https://dhgdev-my.sharepoint.com/personal/", string.Empty).Replace("_dhgdev_com", string.Empty);

编辑看到@Starceaker是第一个使用相同的解决方案。