2010-09-10 32 views
1

Je suis encore un peu nouveau sur RegEx en général. J'essaie de récupérer les noms d'un champ afin que je puisse les séparer pour une utilisation ultérieure (en utilisant Pentaho Data Integration/Kettle pour l'extraction de données). Voici un exemple de la chaîne on me donne:RegEx pour supprimer le texte indésirable

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

Je voudrais avoir le format suivant retourné:

Name One;Name Two;Name Three 

Kettle utilise Java expressions régulières.

Répondre

1

Cela sonne comme vous voulez remplacer & remplacer la base d'une expression régulière. Comment faire correctement cela dépend de votre langue. Mais avec sed je le ferais comme ceci:

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' 

Si vous avez l'intention de le diviser plus tard de toute façon, vous voulez probablement correspondre juste les noms et les retourner im une boucle. Exemple de code en 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

Je serai en mesure de séparer les données dans une autre étape avec PDI. Je veux juste faire le nettoyage initial. – OpenDataAlex

+0

Je viens de vérifier la documentation sur http://wiki.pentaho.com/display/EAI/Regex+Evaluation - il semble que leur implémentation de la substitution de regexp soit assez limitée. La regex que vous voulez obtenir un seul nom est CN = ([^ \ /] *), mais je ne vois pas d'option pour un drapeau "g" lobal pour obtenir tous les noms. - Vous pouvez essayer: (CN = ([^ /] *) [^;] *;) *, puis activer les champs Créer pour les groupes de capture. – Sec

+0

Cette dernière exp m'a laissé avec juste le texte après le dernier point-virgule. Y arriver si = p – OpenDataAlex

0

supposant que vous avez dans fichier.txt:

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

J'ai essayé de charger ce Regex et il n'a pas pu correspondre. – OpenDataAlex