2017-01-08 2 views
0

Я хочу найти строку '15200' (без кавычек) в кортежах. Таким образом, для следующего ввода:Regular Expression in Pig Latin

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

Вывод должен быть:

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 

Мой Pig код выглядит следующим образом:

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

Но когда я дамп B, я получаю:

(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

Удивительно, но это работает:.. 'B = FOREACH GENERATE логика, ((логика МАТЧИ«(^ | *) 15200 ($ |, *) «)? '15200': '- 1') AS expt; ' – pasternak

+1

Вы можете оставить свой комментарий как asnwer :) – sazzad

+0

Это не удивительно. Это просто означает, что движок регулярных выражений ищет соответствие для всей строки, а не произвольной подстроки. В этом случае вы можете использовать '' (. *,)? 15200 (,. *)? ''. –

ответ