質問

C#のログインIDからドメイン/コンピューター情報を削除したい。だから、私はどちらかの" Domain \ me"を作りたいまたは" Domain \ 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);
役に立ちましたか?

解決

ハンマーしか持っていないときは、すべてが釘のように見えます.....

カミソリの刃を使用する----

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

    }

}

他のヒント

次のように、Pathクラスを悪用する可能性があります。

string shortName = System.IO.Path.GetFileNameWithoutExtension(ResourceLoginName);

概要:

string shortName = ResourceLoginName.Split('\\')[1]

これは両方で機能しますが、名前付きグループを使用します。

^(?<domain>.*)\\(?<username>.*)|(?<username>[^\@]*)@(?<domain>.*)?$

私はいつも次のようにしています:

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

今、domainuser.Lengthを見て、そこにいくつのパーツがあるか、ドメインの場合はdomainuser [0]、ユーザー名の場合はdomainuser [1]を確認できます。

        string theString = "domain\\me";
        theString = theString.Split(new char[] { '\\' })[theString.Split(new char[] { '\\' }).Length - 1];

これは両方の有効なドメインログインで機能します:

var regex = @"^(.*\\)?([^\@]*)(@.*)?<*>quot;;
var user = Regex.Replace("domain\\user", regex, "$2", RegexOptions.None);
user = Regex.Replace("user@domain.com", regex, "$2", RegexOptions.None);

デレクスモールズアンサーのピギーバッキング...

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

私のために働いた。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top