从C#中的登录ID中删除域信息

Dan*_*Dan 19 c# string indexof

我想从C#中的登录ID中删除域/计算机信息.所以,我想把"Domain\me"或"Domain\me"改为"me".我总是可以检查是否存在,并使用它作为索引来启动子串...但我正在寻找更优雅和紧凑的东西.

更糟糕的情况:

int startIndex = 0;
int indexOfSlashesSingle = ResourceLoginName.IndexOf("\");
int indexOfSlashesDouble = ResourceLoginName.IndexOf("\\");
if (indexOfSlashesSingle != -1)
    startIndex = indexOfSlashesSingle;
else
    startIndex = indexOfSlashesDouble;
string shortName = ResourceLoginName.Substring(startIndex, ResourceLoginName.Length-1);
Run Code Online (Sandbox Code Playgroud)

小智 39

当你拥有的只是一把锤子时,一切看起来像钉子......

使用剃刀刀片----

using System;
using System.Text.RegularExpressions;
public class MyClass
{
    public static void Main()
    {
        string domainUser = Regex.Replace("domain\\user",".*\\\\(.*)", "$1",RegexOptions.None);
        Console.WriteLine(domainUser);  

    }

}
Run Code Online (Sandbox Code Playgroud)

  • 如果名称是username@domain.com格式怎么办?那里有5-razer刀片解决方案?谢谢. (4认同)

Jef*_*dge 26

你可以滥用Path类,因此:

string shortName = System.IO.Path.GetFileNameWithoutExtension(ResourceLoginName);
Run Code Online (Sandbox Code Playgroud)

  • 如果ResourceLoginName在其中有一个点(例如,roger.smith),可能最好使用System.IO.Path.GetFileName(ResourceLoginName),这在Active Directory和大概其他目录系统方面是完全允许的. (12认同)
  • 很好,那很聪明. (2认同)

Dre*_*ham 6

怎么样:

string shortName = ResourceLoginName.Split('\\')[1]
Run Code Online (Sandbox Code Playgroud)


Der*_*lls 5

这对两个都适用,但对已命名的组都适用。

^(?<domain>.*)\\(?<username>.*)|(?<username>[^\@]*)@(?<domain>.*)?$
Run Code Online (Sandbox Code Playgroud)