这是我要匹配的样本数据(属性):
[87027^适用年龄#619081^12-36个月,108389^国产/进口#619192^国产,108376^包装单位#619113^盒装,12210^分类#121491^牛奶粉,108385^奶源产地#619164^澳洲/新西兰,115919^配方#651827^常规配方奶粉,12212^段位#121499^3段,108380^净含量#619152^2kg以上]
[108385^奶源产地#619183^其它 ,12212^段位#121499^3段,87027^适用年龄#619081^12-36个月,108376^包装单位#619120^桶装,108389^国产/进口#619196^进口,12210^分类#121491^牛奶粉,115919^配方#651827^常规配方奶粉,12241^价格#121803^200-299元,108380^净含量#619147^800-1000g]
[87027^适用年龄#619081^12-36个月,108389^国产/进口#619192^国产,108376^包装单位#619113^盒装,12210^分类#121491^牛奶粉,108385^奶源产地#619164^澳洲/新西兰,115919^配方#651827^常规配方奶粉,12212^段位#121499^3段,108380^净含量#619152^2kg以上]
所以我试图匹配数字之间的所有值。因此,对于第一个数据行,我希望匹配87027和619081之间的值,以及619081和108389之间的值,以此类推。
到目前为止,这是我的代码:
data = LOAD 'SHORT.txt' USING PigStorage() AS (number:chararray, user:chararray, item:chararray, attributes:chararray);
B = FOREACH data GENERATE REGEX_EXTRACT_ALL (attributes, '\\^(.*?)[#|,|\\]]');
DUMP B;
如果您还有其他需要的信息,请与我们联系。谢谢!
答案 0 :(得分:0)
此模式捕获您描述的内容:
\d+?(\^.+?[,#\]])
此处示例:https://regex101.com/r/pOPWwY/2
看起来Hadoop需要双重转义反斜杠,因此在测试上述内容时请记住这一点。
如果要排除标记, # ]
,则:
\d+?(\^.+?)[,#\]]