2012-10-23 105 views
2

我正在從我的業務中轉儲AD。給我用戶名,名稱和組。我的最終目標是定期轉儲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

前兩個CN = XXXXXX沒有|在他們面前的字符,我會完全忽略管道字符,只需搜索CN = {capture}。 –

+0

有效的點。我只是不確定搜索字符串並提取所有這些內容的最佳方法。 – Bartimeus

回答

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包中,您將添加一個腳本組件作爲轉換,然後在輸入列選項卡上,選中與該字段對應的框,即可分辨名稱並指示它爲ReadWrite。

foreach (Match match in Regex.Matches(Row.distinguishedname, @"CN=([^,]*)")) 
    { 
     Row.distinguishedname = (match.Groups[1].Value); 
    } 

如果這是一個新列,那麼你將需要進入輸入和輸出選項卡,展開輸出0,選擇輸出列,單擊添加列,然後提供一個新的名稱和數據類型(簡稱,DT_STR 3000代碼頁1252)。然後,我們將上面的行更改爲

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

不要忘記添加一個引用到RegularExpressions裝配using System.Text.RegularExpressions;

+0

我很抱歉,因爲這是我第一次使用腳本組件。這運行良好,但是我的輸出與我的輸入相同。有沒有簡單的我忘記做? – Bartimeus

+0

@Bartimeus我編輯了我的回覆,以便它可以捕獲列表中的結果,然後您可以使用它。 –

+0

我編輯了答案,以闡明如何在SSIS中使用正則表達式。希望澄清那個答案你的問題@Bartimeus – billinkc

相關問題