2017-01-08 3 views
0

Ich möchte nach der Zeichenfolge '15200' (ohne Anführungszeichen) in Tupeln suchen. Also, für die folgende Eingabe:Regulärer Ausdruck in Schwein Latein

15200 
15200,4000 
4000,15200 
4000,15200,4025 
152000 
152000,4000 
4000,152000 
4000,152000,4025 
115200 
115200,4000 
4000,115200 
4000,115200,4025 

Die Ausgabe sollte:

15200,15200 
15200,4000,15200 
4000,15200,15200 
4000,15200,4025,15200 
152000,-1 
152000,4000,-1 
4000,152000,-1 
4000,152000,4025,-1 
115200,-1 
115200,4000,-1 
4000,115200,-1 
4000,115200,4025,-1 

My Pig-Code sieht wie folgt aus:

A = LOAD '/user/test' USING PigStorage() AS (logic:chararray); 
B = FOREACH A GENERATE 
logic, 
((logic matches '(^|,)15200($|,)')? '15200' :'-1') AS expt; 

Aber wenn ich B Dump, erhalte ich:

(15200,15200) 
(15200,4000,-1) 
(4000,15200,-1) 
(4000,15200,4025,-1) 
(152000,-1) 
(152000,4000,-1) 
(4000,152000,-1) 
(4000,152000,4025,-1) 
(115200,-1) 
(115200,4000,-1) 
(4000,115200,-1) 
(4000,115200,4025,-1) 
+0

Überraschenderweise funktioniert das:.. 'B = FOREACH A GENE Logik, ((Logik Streichhölzer‚(^ | *) 15200 ($ |, *) ')? '15200': '- 1') AS expt; ' – pasternak

+1

Sie können Ihren Kommentar als asnwer :) – sazzad

+0

Es ist nicht so überraschend. Es bedeutet nur, dass die Regex-Engine nach einer Übereinstimmung für die gesamte Zeichenfolge sucht, nicht nach einer beliebigen Teilzeichenfolge. In diesem Fall könnten Sie '(. *,)? 15200 (,. *)? ' –

Antwort