2013-06-19 30 views
2

我有一个包含特殊字符的文件,我正在使用提取功能从文件中提取每个字段。我在提取函数中使用正则表达式来提取数据。我输入文件中有这样的如何提取猪中的星号(*)值

02345MEV120846320134*-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})')) 

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

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

有人可以帮助我吗?

+2

你试过用'\ *'转义它吗? – Puuskis

回答

1

您可以将其放入角色类别中您希望允许特殊字符的位置(您不需要在字符类中转义*),也可以使用\转义特殊字符。

例子:

[\\w\\s*] 

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

,详细了解哪些字符需要转义,请参阅Special Characters on regular-expressions.info

OK,我在你的正则表达式仔细一看,和你的问题是不是*这是匹配此组

([\\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的课程中删除。