C# 从某个字符读取字符串并将其读入某个字符
我想知道是否有可能读取一个长度为n的字符串,从x字符到y字符,而不必将其拆分成更小的片段 我有以下字符串,用于ADC# 从某个字符读取字符串并将其读入某个字符,c#,string,C#,String,我想知道是否有可能读取一个长度为n的字符串,从x字符到y字符,而不必将其拆分成更小的片段 我有以下字符串,用于ADCN=someName、OU=someGroup、OU=groups、DC=some、DC=domain、DC=com中的路径,我希望能够只读取其中的someName部分,而不必先按=/code>或,进行拆分。我如何做到这一点 原因是,我现在不必进行分组比较: SearchResult t1 = search.FindOne(); foreach (string s in t1.Pr
CN=someName、OU=someGroup、OU=groups、DC=some、DC=domain、DC=com
中的路径,我希望能够只读取其中的someName
部分,而不必先按=/code>或,
进行拆分。我如何做到这一点
原因是,我现在不必进行分组比较:
SearchResult t1 = search.FindOne();
foreach (string s in t1.Properties["memberof"])
{
foreach (string g in groups)
{
if (s.ToLower().Contains(g.ToLower()))
{
// do something
}
}
}
我宁愿将if子句设置为等于,但我不希望总是将上述路径/组拆分为两个数组。如何操作?使用带有IndexOf
和Substring
的简单字符串操作:
string s = "CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com";
const string prefix = "CN=";
int start = s.IndexOf(prefix);
if (start >= 0)
{
string value = s.Substring(start + prefix.Length, s.IndexOf(',', start) - prefix.Length);
Console.WriteLine(value);
}
请注意,如果CN=
条目是行中的最后一个条目(因为它不是以逗号结尾),则此简单示例将失败。不过,您可以通过查看第二个IndexOf
调用的返回值来检查这一点
但是在这种情况下,CN=
通常是第一件事。使用带有索引of
和子字符串的简单字符串操作:
string s = "CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com";
const string prefix = "CN=";
int start = s.IndexOf(prefix);
if (start >= 0)
{
string value = s.Substring(start + prefix.Length, s.IndexOf(',', start) - prefix.Length);
Console.WriteLine(value);
}
请注意,如果CN=
条目是行中的最后一个条目(因为它不是以逗号结尾),则此简单示例将失败。不过,您可以通过查看第二个IndexOf
调用的返回值来检查这一点
但是在这种情况下,CN=
通常是第一件事。使用Split
可以检查给定键中的任何是否等于搜索值
var val = "CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com";
var prefix = "CN";
var searchValue = "someName";
var contains = val.Split(',').Any(value => value.Split('=')[0] == prefix && value.Split('=')[1] == searchValue);
除了检查该值是否等于搜索值外,您还可以返回该值
var val = "CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com";
var prefix = "CN";
var foundValue = val.Split(',').FirstOrDefault(value => value.Split('=')[0] == prefix)?.Split('=')[1];
尽管你说你不想使用它,但我仍然使用了Split
,因为我认为它是一个很好的单行程序。使用Split
可以检查给定键中的任何是否等于搜索值
var val = "CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com";
var prefix = "CN";
var searchValue = "someName";
var contains = val.Split(',').Any(value => value.Split('=')[0] == prefix && value.Split('=')[1] == searchValue);
除了检查该值是否等于搜索值外,您还可以返回该值
var val = "CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com";
var prefix = "CN";
var foundValue = val.Split(',').FirstOrDefault(value => value.Split('=')[0] == prefix)?.Split('=')[1];
尽管你说你不想使用它,我还是使用了Split
,因为我认为它是一个很好的单行程序。你可以使用String.IndexOf
找到正确的偏移量,然后使用String.SubString
读取你想要的部分
const string input = "CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com";
const string start = "CN=";
const string stop = ",";
int startIndex = input.IndexOf(start, 0);
int stopIndex = input.IndexOf(stop, startIndex);
var extracted = input.Substring(startIndex + start.Length, stopIndex - startIndex - start.Length);
Console.WriteLine(extracted);
PS:也许还可以看看你的特殊用例 您可以使用String.IndexOf
查找正确的偏移量,然后使用String.SubString
读取所需的零件
const string input = "CN=someName,OU=someGroup,OU=groups,DC=some,DC=domain,DC=com";
const string start = "CN=";
const string stop = ",";
int startIndex = input.IndexOf(start, 0);
int stopIndex = input.IndexOf(stop, startIndex);
var extracted = input.Substring(startIndex + start.Length, stopIndex - startIndex - start.Length);
Console.WriteLine(extracted);
PS:也许还可以看看你的特殊用例 如果要进行组比较,我将使用System.DirectoryServices.AccountManagement命名空间
PrincipalContext Context = new PrincipalContext(ContextType.Domain, "");
UserPrincipal Usr = UserPrincipal.FindByIdentity(Context, "User");
GroupPrincipal G = GroupPrincipal.FindByIdentity(Context, "Group");
if(Usr.IsMemberOf(G)) {
}
如果要进行组比较,我将使用System.DirectoryServices.AccountManagement命名空间
PrincipalContext Context = new PrincipalContext(ContextType.Domain, "");
UserPrincipal Usr = UserPrincipal.FindByIdentity(Context, "User");
GroupPrincipal G = GroupPrincipal.FindByIdentity(Context, "Group");
if(Usr.IsMemberOf(G)) {
}
“我不必做群组比较”我不明白,什么是群组
?@TimSchmelter我比较的是,如果某个用户在某个群组中,为了检查权限,群组
是一组有效的群组。另外,正如我所说,如果可能的话,我希望避免使用数组,而且我对编程比较陌生,所以我不知道所有语法,例如LINQ等等。“我不必做组比较”我不明白,什么是组
?@TimSchmelter我正在比较某个用户是否在某个组中,以检查权限,组
是有效的组数组。另外,正如我所说的,如果可能的话,我希望避免使用数组,而且我对编程比较陌生,所以我不知道所有语法,例如LINQ等。我只想看看“CN=“
前缀,因为这是组名的来源,但是谢谢you@EInherjar我更改了它查找CN=
前缀的代码。还是我误解了你?@EInherjar,这个解决方案在cn位于字符串中的任何位置都有效。对不起,你所说的键是OU、DC之类的,或者是介于cn=
和之间的任何东西,
?@EInherjar我是指OU
或DC
或cn
。搜索值是=
和,
或字符串结尾之间应该匹配的值。我只想看看“CN=“
前缀,因为这是组名的来源,但是谢谢you@EInherjar我更改了它查找CN=
前缀的代码。还是我误解了你?@EInherjar,这个解决方案在cn位于字符串中的任何位置都有效。对不起,你所说的键是OU、DC之类的,或者是介于cn=
和之间的任何东西,
?@EInherjar我是指OU
或DC
或cn
。搜索值是=
和,
或字符串结尾之间应该匹配的值。这可以工作,但如果允许的组数组中有组,而这些组在AD中还不存在,则会中断。有什么办法可以避免这种情况吗?这是可行的,但如果允许的组数组中存在组,而这些组在广告中还不存在,那么它就会中断。有什么办法可以避免这种情况吗?