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

C# 获取URL(字符串)并从中获取所需的值,c#,substring,C#,Substring,我目前正在开发一个应用程序,它将为任何决定加入组的用户创建一个新文件夹。我目前收到一个URL,需要删除某些部分才能保留用户名。这个URL对于我们公司的所有用户都是一样的,唯一需要更改的是用户名“personal/”。名字会随着不同的用户而改变,我需要的只是名字和姓氏 For example string url = "https://dhgdev-my.sharepoint.com/personal/john_dough_dhgdev_com"; string name = \\ l

我目前正在开发一个应用程序,它将为任何决定加入组的用户创建一个新文件夹。我目前收到一个URL,需要删除某些部分才能保留用户名。这个URL对于我们公司的所有用户都是一样的,唯一需要更改的是用户名“personal/”。名字会随着不同的用户而改变,我需要的只是名字和姓氏

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

您可以从该字符串创建Uri,并从段中读取desired值

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]);
编辑
看看你修改过的问题,你似乎还想删除最后一段中的最后两个子串。在这种情况下,在获得Uri的最后一段之后,您可以继续进行简单的字符串操作

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));

当然,如果只需要删除
\u com
部分,则应调整上面使用的常数2。

如果始终是URL的最后一部分,则可以执行以下操作:

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];
如果url总是具有相同的结构,并且用户名位于最后一段,那么使用我上面提出的两种解决方案之一来获取最后一段并应用相同的操作来获取用户名。

是否修复了“”和“\u dhgdev\u 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);

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

您可以使用正则表达式来获取名称:

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”的URL,您可能希望使用
^.*\/(!?.*\/)personal\/(.*)$
作为正则表达式模式


(我不在Visual Studio中使用我的计算机,因此无法对此进行测试)

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

        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);

Edit seen@Starceaker是第一个使用相同解决方案的人。

请阅读并提问您能否更清楚地定义要检索的字符串部分?如果他们有一个双管姓等怎么办?你想只检索最后一段中的2个单词吗?名称和字符串其余部分之间的区别是什么。很容易找到Uri的最后一部分,但无法区分名称和其余部分。您是否也有以dhgdev_com结尾的字符串?用户名可能不在最后一段中?你能解释一下你的url结构吗?如果你投了反对票,至少解释一下原因。OP的问题不是很清楚,我给了他一个带有某种假设/问题的答案。我的答案被否决了,所以也许这不是一个好答案,但不知道为什么。谢谢你的编辑。