我正在处理我公司的广告转储。我获得了用户名,名称和组。我的最终目标是定期转储csv文件,我的SSIS包抓住它,从组中删除所有垃圾,然后从中提取报告,以便用户可以搜索某人的名称或用户名将列出他们所属的组。
我遇到的问题是,群组部分充满了大量垃圾,例如我给出了类似的内容:
CN=Standards of Conduct,CN=Users,DC=rlhk,DC=local|CN=ManagementLevel-9,OU=Groups,OU=rem,DC=rlhk,DC=local
这是一个非常短的(有些超过3000个字符)。我要提取的部分是行为准则和管理级别9。我说这是半随机的,因为显然不是每个人都属于同一个群体,我不相信他们都是在同一个顺序。
该组始终紧跟在| CN =之后,第一次出现时没有|在前面它只是CN =。
我尝试过类似的事情:
SUBSTRING(Groups,FINDSTRING(Groups,"|CN=",1 ) + 3,FINDSTRING(Groups,",",1) - 4)
然而,它只是“| CN =”的第一次迭代显然,我不知道如何获得所有这些。
谢谢
答案 0 :(得分:1)
如果符合您列出的规则,下面的正则表达式代码将与您的论坛匹配。正则表达式将在输入字符串中搜索CN =的所有实例,然后搜索所有内容,直到逗号。
string groupString = "CN=Standards of Conduct,CN=Users,DC=rlhk,DC=local|CN=ManagementLevel-9,OU=Groups,OU=rem,DC=rlhk,DC=local";
foreach (Match match in Regex.Matches(groupString , @"CN=([^,]*)"))
{
Console.WriteLine(match.Groups[1].Value);
}
Console.ReadLine();
这是另一个版本(非控制台),它在List<string>
中捕获结果,因此您可以迭代它或者检查其中是否包含特定值:
string groupString = "CN=Standards of Conduct,CN=Users,DC=rlhk,DC=local|CN=ManagementLevel-9,OU=Groups,OU=rem,DC=rlhk,DC=local";
List<string> matchedGroups = new List<string>();
foreach (Match match in Regex.Matches(groupString , @"CN=([^,]*)"))
{
matchedGroups.Add(match.Groups[1].Value);
}
//Use the matchedGroups collection here
要在SSIS包中使用它,您将脚本组件添加为转换,然后在“输入列”选项卡上,选中与该字段对应的框,即distinguishedname,并指明它是ReadWrite。
foreach (Match match in Regex.Matches(Row.distinguishedname, @"CN=([^,]*)"))
{
Row.distinguishedname = (match.Groups[1].Value);
}
如果要成为新列,则需要进入“输入和输出”选项卡,展开“输出0”,选择“输出列”,单击“添加列”,然后为其提供新名称和数据类型(simplifiedName,DT_STR) 3000代码页1252)。然后我们将上面的行改为
Row.simplifiedName = (match.Groups[1].Value);
不要忘记添加对RegularExpressions程序集using System.Text.RegularExpressions;