Ssis 从一个半随机字符串中提取多个子字符串

Ssis 从一个半随机字符串中提取多个子字符串,ssis,Ssis,我正在处理一堆我公司的广告。我有用户名、名称和组。我的最终目标是定期转储csv文件,我的SSIS包会抓取它,从组中删除所有垃圾,然后从中获取一个报告源,以便用户可以搜索某人的姓名或用户名,并列出他们所属的组 我遇到的问题是“组”部分充满了大量垃圾。例如,我收到了如下内容: CN=Standards of Conduct,CN=Users,DC=rlhk,DC=local|CN=ManagementLevel-9,OU=Groups,OU=rem,DC=rlhk,DC=local 这是一个非常短

我正在处理一堆我公司的广告。我有用户名、名称和组。我的最终目标是定期转储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=”显然,我不知道如何得到所有这些


谢谢

如果您的组遵循您概述的规则,下面的正则表达式代码将与您的组匹配。正则表达式将在输入字符串中搜索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();
下面是另一个版本(非控制台),它在
列表中捕获结果,因此您可以对其进行迭代,或者检查其中是否包含特定值:

        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
如果这是一个新列,则需要进入“输入和输出”选项卡,展开“输出0”,选择“输出列”,单击“添加列”,然后为其提供新名称和数据类型(simplifiedName,DT_STR 3000代码页1252)。然后我们将上面的行更改为

        Row.simplifiedName = (match.Groups[1].Value);

不要忘记使用System.Text.RegularExpressions添加对RegularExpressions程序集
的引用

前两个CN=XXXXXX前面没有|字符,我将完全忽略管道字符,只搜索CN={capture}。有效点。我只是不确定搜索字符串并提取所有这些内容的最佳方法是什么。很抱歉,这是我第一次使用脚本组件。这运行正常,但是我的输出与输入相同。有什么简单的事情我忘记做了吗?@Bartimeus我编辑了我的回答,这样它就可以将结果捕获到一个列表中,然后你就可以使用它了。我编辑了答案,以阐明如何在SSIS内部使用正则表达式。希望这能澄清你的问题@BartimeusI我真的很感谢你们帮了这么多忙。我不知道你说的“在这里使用matchedGroups集合”是什么意思。谢谢你,非常感谢你到目前为止的帮助!我终于让它工作了。我使用了
Row.Groups=string.Join(“,”,matchedGroups.ToArray())
        Row.simplifiedName = (match.Groups[1].Value);