regex - 正则表达式全部使用 pig 提取

标签 regex hadoop apache-pig

这是我的示例数据(属性),用于匹配:

[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;

如果您需要任何其他信息,请告诉我。谢谢!

最佳答案

此模式捕获您描述的内容:

\d+?(\^.+?[,#\]])

此处的示例:https://regex101.com/r/pOPWwY/2

看起来Hadoop需要反斜杠的两次转义,因此在测试上述内容时请记住这一点。

如果要排除标记, # ],则:
\d+?(\^.+?)[,#\]]

关于regex - 正则表达式全部使用 pig 提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40473990/

相关文章:

java - 在多个标记上拆分带有嵌套括号的字符串

php - 如果冒号是第一个字符,则删除它

hadoop - NodeManager 未在 Hadoop Yarn 中启动

hadoop - 未找到(有效)输入数据!在 pig

java - 如何从 Hadoop MR 中的非结构化数据生成 JSON 对象?

xml - 将 XML 加载到 PIG : Error 2998

regex - 如何编写一个正则表达式来匹配所有不是 '$' 后跟 'i' 或 '{' 的字符?

c# - 最适合我目的的正则表达式

Hadoop distcp 错误路径仍然复制——数据去哪儿了?

sql - 在表名中使用连字符 (-) 创建 Hive 表