2010-09-10 90 views
1

我對RegEx一般來說還是一個新手。我試圖從字段中檢索名稱,以便將它們拆分以供進一步使用(使用Pentaho Data Integration/Kettle進行數據提取)。下面是我給出的字符串的示例:RegEx刪除不需要的文本

CN=Name One/OU=Site/O=Domain;CN=Name Two/OU=Site/O=Domain;CN=Name Three/OU=Site/O=Domain 

我想有以下格式返回:

Name One;Name Two;Name Three 

水壺使用Java正則表達式。

回答

1

這聽起來像你想替代基於正則表達式替換&。如何正確地做到這一點取決於你的語言。但隨着SED我會做這樣的:

echo "CN=Name One/OU=Site/O=Domain;CN=Name Two/OU=Site/O=Domain;CN=Name Three/OU=Site/O=Domain" |\ 
sed 's/CN=\([^\/]*\)[^;]*/\1/g' 

如果你打算以後無論如何要拆呢,你可能只想匹配的名稱,並返回他們我是一個循環。 Perl中的示例代碼:

#!/usr/bin/perl 
$line="CN=Name One/OU=Site/O=Domain;CN=Name Two/OU=Site/O=Domain;CN=Name Three/OU=Site/O=Domain"; 
for $match ($line =~ /CN=([^\/]*)/g){ 
    print "Name: $match\n"; 
} 
+0

在PDI的另一個步驟中,我將能夠拆分數據。只想做最初的清潔。 – OpenDataAlex 2010-09-10 14:19:04

+0

我剛剛檢查了http://wiki.pentaho.com/display/EAI/Regex+Evaluation上的文檔 - 它看起來像他們的正則表達式替換的東西是相當有限的。你想得到一個單一名稱的正則表達式是CN =([^ \ /] *),但是我沒有看到用「g」lobal標誌來獲得所有名字的選項。 - 您可以嘗試:(CN =([^ /] *)[^;] *;)*,然後爲捕獲組啓用創建字段。 – Sec 2010-09-10 14:29:21

+0

最後一個exp給我留下了最後一個分號後面的文字。去那裏雖然= p – OpenDataAlex 2010-09-10 14:49:50

0

假設你有它在file.txt的:

sed -e 's/\/OU=Site\/O=Domain//g' -e 's/CN=//g' file.txt 
+0

試圖加載該正則表達式,但無法匹配。 – OpenDataAlex 2010-09-10 14:16:43