2010-09-10 60 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