替换带引号字符串中的字符

h5qlskok  于 2021-06-25  发布在  Pig
关注(0)|答案(4)|浏览(373)

作为我项目的一部分,我有一个csv文件,它有逗号分隔的值。但很少有字段用引号括起来。因此,数据加载不正确。例如:如果数据是==>>车,鹿,“熊,猫”
在上面的例子中,理想情况下应该有3列。但由于rat和mat之间存在逗号,因此它被视为4列。“老鼠,垫子”这个字段不是用棍棒固定的,被认为是一个单独的字段。
请说明pig中是否有处理此类情况的方法

c9x0cxw0

c9x0cxw01#

你能试试这个吗?
输入.csv

car,deer,"bear,cat"
car,deer,"bear,cat"

pigscript:输出格式1:

A = LOAD 'input.csv' AS line;
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line,'(\\w+),(\\w+),(.*)$')) AS (col1:chararray,col2:chararray,col3:chararray);
DUMP B;

输出:

(car,deer,"bear,cat")
(car,deer,"bear,cat")

pigscript输出格式2:

A = LOAD 'input.csv' AS line;
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line,'(\\w+),(\\w+),"(\\w+),(.*)"$')) AS (col1:chararray,col2:chararray,col3:chararray,col4:chararray);
DUMP B;

输出:

(car,deer,bear,cat)
(car,deer,bear,cat)
jw5wzhpr

jw5wzhpr2#

public static void main(String[] args) {
        // TODO code application logic here
        String str = "c,b,\"c,d\"";
        System.out.println(str);
           if(str.contains("\"")){
              str= str.replaceAll("\"", " ");
              //System.out.println(str);
              str = str.replaceAll(" ", "");
              System.out.println(str);

           }
    }

r55awzrz

r55awzrz3#

您可以使用apachecsv库来处理这个问题

vi4fp9gy

vi4fp9gy4#

你可以试试这个正则表达式:
这里看看,这样已经问上了,很好的被用户解释了。
单击此处

相关问题