2014-11-07 1 views
0

вход:PIG: индекс в REGEX_EXTRACT (строка, '\ w {2}', 1);

1 XDi AL LO LOL 
LOVEISALL 
OP 
LO 
OPW 

Код

a = load 'input' as (line:chararray); 
b = foreach a generate REGEX_EXTRACT(line, '\\w{2}', 0); 
dump b; 

Я хотел бы извлечь, если входные файлы имеют два символа на нем.

Выход:

(XD) 
(LO) 
(OP) 
(LO) 
(OP) 

Я мог бы понять объяснение индекса регулярных выражений в свиных документов. что это значение 0 или 1. Означает ли это положение слова в линейном скаляре? Если да, я дал 0, поэтому он должен искать первое появление слова в строке. но он просматривает полную строку.

Есть ли у кого-то идеи.

ответ

0

Вы можете попробовать это?

a = load 'input' as (line:chararray); 
b = foreach a generate REGEX_EXTRACT(line, '(^\\w{2}$)', 1) AS result; 
c = FILTER b BY result is not null; 
dump c; 

Output: 
(OP) 
(LO) 
+0

Ваш шаблон Regex правильный, спасибо. Pls сообщит мне причину упоминания 1 в индексе. – datarockz2

+0

1 означает возврат строки, которая соответствует первой группе захвата(). Например, мое регулярное выражение - это что-то вроде REGEX_EXTRACT (строка, '(\\ w {2}) (\\ w {2}) (\\ w {2})', 2). В этом случае мой вывод будет второй группой захвата. –

Смежные вопросы