3

我正在解析表单的一些数据:

(['L123', 'L234', 'L1', 'L253764'])
(['L23', 'L2'])
(['L5'])
...

其中括号内的短语(包括括号)被编码为单个字符数组。

我想只提取 L+(digits) 标签来获得以下形式的元组:

((L123, L234, L1, L253764))
((L23, L2))
((L5))

我尝试使用正则表达式'(L\d+)' 使用 REGEX_EXTRACT_ALL,但它似乎只提取每行一个标签,这对我来说没用。有没有办法按照我上面描述的方式创建元组?

4

1 回答 1

2

如果顺序无关紧要,那么这将起作用:

-- foo is the tuple, and bar is the name of the chararray
B = FOREACH A GENERATE TOKENIZE(foo.bar, ',') AS values: {T: (value: chararray)} ; 
C = FOREACH B {
    clean_values = FOREACH values GENERATE  
                   REGEX_EXTRACT(value, '(L[0-9]+)', 1) AS clean_value: chararray ; 
    GENERATE clean_values ;
} 

架构和输出是:

C: {clean_values: {T: (clean_value: chararray)}}
({(L123),(L234),(L1),(L253764)})
({(L23),(L2)})
({(L5)})

一般来说,如果你不知道数组有多少元素,那么一个包会更好。

于 2013-07-16T02:19:03.753 回答