使用DirectoryServices.AccountManagement我得到用戶DistinguishedName
它看起來像這樣:提高正則表達式搜索
CN=Adam West,OU=STORE,OU=COMPANY,DC=mycompany,DC=group,DC=eu
我需要從這個獲得第一OU
值。
我發現類似的解決方案:C# Extracting a name from a string
而且使用了一些調整我創造了這個代碼:
string input = @"CN=Adam West,OU=STORE,OU=COMPANY,DC=mycompany,DC=group,DC=eu";
Match m = Regex.Match(input, @"OU=([a-zA-Z\\]+)\,.*$");
Console.WriteLine(m.Groups[1].Value);
此代碼返回STORE
如預期,但如果我改變Groups[1]
到Groups[0]
我得到幾乎相同的結果,輸入字符串:
OU=STORE,OU=COMPANY,DC=mycompany,DC=group,DC=eu
如何更改此正則表達式,使其僅返回OU
的值?所以在這個例子中,我得到了2個匹配的數組。如果我的字符串中有更多的OU,那麼數組會更長。
編輯: 我已經轉換我的代碼(使用@dasblinkenlight建議)進入功能:
private static List<string> GetOUs()
{
var input = @"CN=Adam West,OU=STORE,OU=COMPANY,DC=mycompany,DC=group,DC=eu";
var mm = Regex.Matches(input, @"OU=([a-zA-Z\\]+)");
return (from Match m in mm select m.Groups[1].Value).ToList();
}
是正確的嗎?
我更新了我的問題,並將我的代碼轉換爲函數。你可以看看嗎? – Misiu 2013-02-20 14:49:06
@Misiu是的,改變是正確的。你可以減少'res'變量,並返回你賦給它的表達式,就像這樣:'return(from m in mm select m.Groups [1] .Value).ToList();' – dasblinkenlight 2013-02-20 14:53:57
謝謝! :)是否有可能只獲得'OU'simper的第一個值?現在我得到所有OU組並且必須執行'[0]',但是也許我可以更快更輕鬆地獲得第一個OU? – Misiu 2013-02-20 15:01:48