0

到目前为止,我已经测试了 2 个正则表达式,但只执行了我希望他们执行的部分操作...

  • ((?:[^,"']|"[^"]*"|'[^']*')+)
  • ,(?=([^"]*"[^"]*")*[^"]*$)

这是我要拆分的数据的示例...

  • 27230,419.37
  • 27232,688.95
  • 27238,409.4
  • 27240,861.92
  • 27250,176.4
  • 27254,"1,144.16"

由于如果数字为 1000 或更大,它很可能是从 CSV 上传的,因此引号内将有一个逗号。我遇到的问题是,当我这样做时,value.split(',')它会在引号之间分裂。我想要一个正则表达式来代替一堆 for 循环和 if 语句。任何帮助将不胜感激。

(我正在使用 Apex 所以这就是为什么它'不是"

4

3 回答 3

2

不要使用正则表达式,使用CSV 解析器

于 2012-08-07T14:57:49.807 回答
1
String input = "27254,\"1,144.16\"";
List<String> data = new ArrayList<String>();
boolean inQuotes = false;
boolean escaped = false;
StringBuilder buf = new StringBuilder();
for (int i = 0; i < input.length(); i++){
    char c = input.charAt(i);
    if (escaped){
        buf.append(c);
        escaped = false;
    } else if (c == '\\') {
        escaped = true;
    } else if (c == '"') {
        inQuotes = !inQuotes;
    } else if (c == ',' && !inQuotes){
        data.add(buf.toString());
        buf = new StringBuilder();
    } else {
        buf.append(c);
    }
}
data.add(buf.toString());
于 2012-08-07T18:26:07.733 回答
0
        for(String line : lines){    
        i++;

        if(skipFirst && i <= 1) continue;
        if(isBlank(line)) return error('Line ' + i + ' blank');
        pattern regex=pattern.compile(',(?=([^"]*"[^"]*")*[^"]*$)');


            cells=regex.split(line);
            string tmp0=cells.get(1).replace('"','');


        if(cells == null || cells.size() < 2) return error('Line ' + i + ' is either blank or contains only one cell');
        code = cells.get(0);
        if(code != null) code = code.trim();
        try{
            //If the amount is empty or null, assume it is 0
            if(cells.get(1) == null || cells.get(1) == ''){
                amount = 0;
            }
            else{
              if(!cells.get(1).contains('"')){
                    amount = Decimal.valueOf(cells.get(1));
              }else{
                    string tmp=cells.get(1).replace('"','');
                    amount = Decimal.valueOf(tmp.replace(',',''));
              }

            }
        }catch(System.TypeException e){
            return error('Line ' + i + ' contains invalid amount');
        }
        values.put(code,amount);

    }

这篇文章是为了后代,因为我确实在salesforce内部使用正则表达式找到了一个解决方案……但是它很长而且可能没有必要。

于 2012-08-14T14:42:40.957 回答