我正在尝试解析数据集中的单个字段。我试图用包含括号的电影过滤掉所有元组' {'标题中的任何地方。当我运行这个时,我得到一个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 '.*{.*');
当我在表达式的开头取出。*时,它会运行,但没有任何东西被过滤掉...任何关于编写正则表达式的建议都不关心给定字符之前或之后的内容?
答案 0 :(得分:3)
在Java正则表达式中,{
字符标记由name表示的字符类的开头,例如{Alpha}
。使用Java,您可以使用反斜杠字符(也需要转义Java)来转义左括号字符:\\{
。
根据the Pig Latin Reference Manual,你应该“为正则表达式使用Java format”用于“MATCHES”运算符,该运算符链接到Pattern
的Javadoc,它描述了正则表达式语法
这意味着您应该能够直接在“MATCHES”Pig Latin运算符中应用转义。
movie_actors = FILTER raw_actors BY NOT(movie_data MATCHES '.*\\{.*');