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}.*




Online regex tester and debugger

Wenn man nur gelegentlich Regex benötigt, sind kleine Helferlein unersetzlich, sonst kann es sehr mühsam und zeitintensiv werden…

Bei der letzten Recherche habe ich https://regex101.com/ gefunden und bin begeistert.

Es ist noch simpler als die anderen Tools und unterstützt Dich bei Regex ungemein.




Regular Expression für Wildcards in pdi

In einigen Transformations- und Jobschritten, insbesondere die die Handhabung von Dateien umsetzen, gibt es die Möglichkeit, Wildcards anzugeben. Aber natürlich gleich in der mächtigen Variante: Wildcard als Regulärer Ausdruck (Regular Expression)!

Wie es geht wird auf How to process a Kettle transformation once per filename beschrieben

The correct regex to get all files whose extension is .xml is ”.*\.xml”. This isn’t a regex tutorial, go look that up on the web.

Bitte die Anführungszeichen nicht mit angeben, für Excel-Dokumente lautet das z.B.  „.*\.xlsx“ oder „.*\.xlsx$“, wenn man das konkret auf das Zeilen- oder Stringende prüfen will.

Hilfreich bei der Erstellung von Regulären Ausdrücken ist auch der Online Regular Expression Builder

Einlesen von Verzeichnissen

Auch dasEinlesen von Verzeichnissen nutzt reguläre Ausdrücke, nachfolgend ein Beispiel mit der Transformation Get File Names

 

How to process a Kettle transformation once per filename