我有一个包含特殊字符的文件,我使用提取功能从文件中提取每个字段。我在提取函数中使用正则表达式模式来提取数据。我的输入文件包含这样的数据
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})'))
此查询失败,我没有得到答案。
我无法从文件中提取*
作为值,因为*
是元字符,并且它在正则表达式中具有特定值。
有人可以帮我吗?
答案 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
。