21

我想从 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);
4

8 回答 8

42

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

使用剃须刀片----

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

    }

}
于 2008-10-09T02:29:56.477 回答
27

您可以滥用 Path 类,因此:

string shortName = System.IO.Path.GetFileNameWithoutExtension(ResourceLoginName);
于 2008-10-09T02:52:51.657 回答
7

怎么样:

string shortName = ResourceLoginName.Split('\\')[1]
于 2011-05-02T15:25:50.120 回答
6

这适用于两者,但适用于命名组。

^(?<domain>.*)\\(?<username>.*)|(?<username>[^\@]*)@(?<domain>.*)?$
于 2015-01-12T19:55:56.717 回答
3

我总是这样做:

    string[] domainuser;
    string Auth_User = Request.ServerVariables["AUTH_USER"].ToString().ToLower(); 
    domainuser = Auth_User.Split('\\');

现在您可以查看 domainuser.Length 以查看其中有多少部分, domainuser[0] 用于域, domainuser[1] 用于用户名。

于 2008-10-09T01:13:35.150 回答
2
        string theString = "domain\\me";
        theString = theString.Split(new char[] { '\\' })[theString.Split(new char[] { '\\' }).Length - 1];
于 2008-10-09T01:17:34.067 回答
2

这适用于两个有效的域登录:

var regex = @"^(.*\\)?([^\@]*)(@.*)?$";
var user = Regex.Replace("domain\\user", regex, "$2", RegexOptions.None);
user = Regex.Replace("user@domain.com", regex, "$2", RegexOptions.None);
于 2014-08-06T19:34:10.417 回答
1

小猪支持 Derek Smalls 的答案……

Regex.Replace(User.Identity.Name,@"^(?<domain>.*)\\(?<username>.*)|(?<username>[^\@]*)@(?<domain>.*)?$", "${username}", RegexOptions.None)

为我工作。

于 2015-08-12T19:01:02.497 回答