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)
Удивительно, но это работает:.. 'B = FOREACH GENERATE логика, ((логика МАТЧИ«(^ | *) 15200 ($ |, *) «)? '15200': '- 1') AS expt; ' – pasternak
Вы можете оставить свой комментарий как asnwer :) – sazzad
Это не удивительно. Это просто означает, что движок регулярных выражений ищет соответствие для всей строки, а не произвольной подстроки. В этом случае вы можете использовать '' (. *,)? 15200 (,. *)? ''. –