如何在猪中提取星号(*)值

时间:2013-06-19 11:16:29

标签: regex apache-pig

我有一个包含特殊字符的文件,我使用提取功能从文件中提取每个字段。我在提取函数中使用正则表达式模式来提取数据。我的输入文件包含这样的数据

023450123562389MEV120846320134*-000000.0006/03/2012

我的查询就像

b=foreach a generate flattern(EXTRACT(a,'([\\w\\s]{05})([\\w\\s]{10})([\\w\\s]{02})([\\w\\s]{01})([\\w\\s]{10})([\\w\\s\\W]{01})([\\w\\s\\W]{10})([\\w\\s]{10})'))

此查询失败,我没有得到答案。

我无法从文件中提取*作为值,因为*是元字符,并且它在正则表达式中具有特定值。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

您可以将它放在要允许特殊字符的位置的字符类中(您不需要在字符类中转义*),也可以通过使用\

示例:

[\\w\\s*]

[\\w\\s]{5}\\*

有关哪些角色需要转义的详细信息,请参阅Special Characters on regular-expressions.info

好的,我仔细查看了你的正则表达式,问题不在于*这个匹配的是

([\\w\\s]{05})([\\w\\s]{10})([\\w\\s]{02})([\\w\\s]{01})([\\w\\s]{10})([\\w\\s\\W]{01})([\\w\\s\\W]{10})([\\w\\s]{10})
                                                                                       ^^^^^^^^^^^^^^^^^

因为您允许\W非单词字符。

你的问题是最后一部分的点和斜线,因为那个组

([\\w\\s]{05})([\\w\\s]{10})([\\w\\s]{02})([\\w\\s]{01})([\\w\\s]{10})([\\w\\s\\W]{01})([\\w\\s\\W]{10})([\\w\\s]{10})
                                                                                                        ^^^^^^^^^^^^^^

只允许使用单词字符和空格。

但问题是:你想要达到什么目的?我很确定这个有一个更简单的正则表达式。至少可以从具有\s的类中删除\W