我尝试了Regex Code Review此处提供的解决方案,但似乎无法使其正常工作。我正在处理的是相同的场景。我还不熟悉正则表达式,但是我想用它来删除字符串中的字符“ CN =“,然后删除字符串中第一个逗号之后的所有内容。例如,
CN = Joseph Rod,OU = LaptopUser,OU = Users,DC = Company,DC = local
成为
约瑟夫·罗德
代码:
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[5]
{
new DataColumn("givenName", typeof (string)),
new DataColumn("sn", typeof (string)),
new DataColumn("mail", typeof (string)),
new DataColumn("department", typeof (string)),
new DataColumn("manager", typeof (string))
});
using (var context = new PrincipalContext(ContextType.Domain, null))
{
using (var group = GroupPrincipal.FindByIdentity(context, "Users"))
{
var users = group.GetMembers(true);
foreach (UserPrincipal user in users)
{
DirectoryEntry de = user.GetUnderlyingObject() as DirectoryEntry;
dt.Rows.Add
(
Convert.ToString(de.Properties["givenName"].Value),
Convert.ToString(de.Properties["sn"].Value),
Convert.ToString(de.Properties["mail"].Value),
Convert.ToString(de.Properties["department"].Value),
Regex.Replace((Convert.ToString(de.Properties["manager"].Value)), @"CN=([^,]*),", "$1")
);
}
rgAdUsrs.DataSource = dt;
rgAdUsrs.DataBind();
}
}
}
但是我的代码只是删除了“ CN =“和第一个逗号。从第一个逗号到右边的所有内容都需要删除。
以上代码的结果:
Joseph RodOU = LaptopUser,OU = Users,DC = Company,DC = local
如何修改正则表达式以删除逗号右边的字符?
答案 0 :(得分:2)
也要删除该行的其余部分
CN=([^,]*),.*$
,然后替换为$1
。
但是,正如已经提到的,您实际上并不需要正则表达式来实现此目的。这将搜索第一个=
和第一个,
之间的字符串。
Console.WriteLine(input.Substring(input.IndexOf("=") + 1, input.IndexOf(',') - (input.IndexOf("=") + 1)));
答案 1 :(得分:1)
如果字符串始终以“ CN =“开头,则可以使用string.Substring()
轻松获取数据:
string input = "CN=Joseph Rod,OU=LaptopUser,OU=Users,DC=Company,DC=local";
// take a string starting at 3rd index, going to the first comma
Console.WriteLine(input.Substring(3, input.IndexOf(',') - 3));
//Output: "Joseph Rod"
如果字符串可以以任何开头但始终坚持相同的模式,则可以使用Split()
和一些LINQ:
string input = "OU=LaptopUser,CN=Joseph Rod,OU=Users,DC=Company,DC=local";
string[] splitInput = input.Split(',');
Console.WriteLine(splitInput.FirstOrDefault(x => x.StartsWith("CN="))?.Substring(3));
//Output: "Joseph Rod"
here的小提琴演奏
这当然是合理的输入。