使用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