我正在解析表单的一些数据:
(['L123', 'L234', 'L1', 'L253764'])
(['L23', 'L2'])
(['L5'])
...
其中括号内的短语(包括括号)被编码为单个字符数组。
我只想提取 L+(digits) 标签来获取以下形式的元组:
((L123, L234, L1, L253764))
((L23, L2))
((L5))
我曾尝试使用正则表达式 '(L\d+)' 使用 REGEX_EXTRACT_ALL,但它似乎每行只提取一个标签,这对我来说没用。有没有办法按照我上面描述的方式创建元组?
最佳答案
如果顺序无关紧要,那么这将起作用:
-- 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)})
通常,如果您不知道数组将包含多少个元素,那么包会更好。
关于regex - Hadoop Pig : Extract all substrings matching a given regular expression,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17666465/