如何在C#中使用正则表达式从字符串中删除所有不需要的字符?

时间:2018-08-29 17:41:02

标签: c# asp.net regex

我尝试了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

如何修改正则表达式以删除逗号右边的字符?

2 个答案:

答案 0 :(得分:2)

也要删除该行的其余部分

CN=([^,]*),.*$

,然后替换为$1

Regex Demo

但是,正如已经提到的,您实际上并不需要正则表达式来实现此目的。这将搜索第一个=和第一个,之间的字符串。

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的小提琴演奏

这当然是合理的输入。