Ralf Hohoff

Filter rows mit Regex im String

Über den Baustein Filter rows kann der Datenstrom in in Pentaho Data Integration sehr fein gesteuert werden. Neben den üblichen Vergleichsoperatoren ist auch die Suche mit einem regulären Ausdruck möglich. Wenn man innerhalb eines Strings sucht, ist hierbei ein kleines Detail zu beachten.

Für unser Beispiel wollen wir innerhalb eines Textes nach einer Vorgangsnummer suchen. Selbstverständlich könnte dies auch eine Kunden- oder Lieferantennummer oder ein gänzlich anderer Suchbegriff sein.

Beispieltext

ACHTUNG: Der Vorgang wird auch unter 60134 geführt, bitte beachten!

Alle Datensätze im Datenstrom, die eine Vorgangsnummer (5-stellige Zahl mit einer 6 beginnend und vorangestelltem Leerzeichen) enthalten, sollen herausgefiltert und bearbeitet werden.

Auf https://regex101.com/ kann man sich Unterstützung für die Erstellung des regulären Ausdrucks und den Test holen. Der folgende Regex findet auch die gewünschte Zeichenkette.

\s6[0-9]{4}

Leider funktioniert das Filtern in Pentaho damit nicht 🙁

Die Lösung ist, dass der reguläre Ausdruck für den gesamten Text gelten muss.

Replace-In-String uses method find() to locate a substring descibed by the given pattern.
Filter-Rows internally uses method matches() which tests if the whole string is described by the pattern.

https://forums.pentaho.com/threads/222311-Filter-rows-with-Regex-simple/

Die Erweiterung des Regex bringt die Lösung, denn hierdurch wird der gesamte Text als Treffer erkannt.

\s6[0-9]{4}  erweitert zu .*\s6[0-9]{4}.*

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert