使用正则表达式作为带pig-latin(或一般的java)的过滤器

0s7z1bwu  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(332)

我试图通过数据集中的一个字段进行解析。我试图过滤掉所有的元组与电影中包含括号“{”在标题的任何地方。当我运行这个程序时,我得到一个java错误,说我下面的不是有效的正则表达式。

raw_actors = LOAD 'hdfs:/user/XXX' USING org.apache.pig.piggybank.storage.CSVExcelStorage('\t') AS (name:chararray,movie_data:chararray,role:chararray);
movie_actors = FILTER raw_actors BY NOT(movie_data MATCHES '.*{.*');

当我取出表达式开头的.*时,它会运行,但没有任何内容会被过滤掉。。。对于编写一个不关心给定字符前后的正则表达式,有什么建议吗?

bjp0bcyl

bjp0bcyl1#

在java正则表达式中 { character标记以名称表示的字符类的开始,例如。 {Alpha} . 对于java,您可以用反斜杠字符转义大括号字符(java也需要转义): \\{ .
根据pig拉丁参考手册,您应该为“matches”操作符“usethejava formatforregular expressions”,该操作符链接到javadocforregular expressions Pattern ,它描述正则表达式语法。
这意味着您应该能够直接在“matches”操作符中应用转义。

movie_actors = FILTER raw_actors BY NOT(movie_data MATCHES '.*\\{.*');

相关问题