Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java中的正则表达式提取excel中的所有单元格引用_Java_Regex_Excel_Substring_Excel Formula - Fatal编程技术网

使用java中的正则表达式提取excel中的所有单元格引用

使用java中的正则表达式提取excel中的所有单元格引用,java,regex,excel,substring,excel-formula,Java,Regex,Excel,Substring,Excel Formula,拥有excel数据和公式,如: (S10+S14+S18+S22+S26+S30+S34) E10+E11+总和(E10;E14:E17)*E18-IF(E19public static void main(字符串[]args){ String formula=“E10+E11+SUM(E10;E14:E17)*E18-IF(E19在链接的第一个线程上,页面上找不到链接下方的正则表达式。您真的在使用该页面中的正则表达式吗?建议使用的正则表达式是: (\w+|)?\$?(?:\bXF[A-D]|

拥有excel数据和公式,如:

  • (S10+S14+S18+S22+S26+S30+S34)
  • E10+E11+总和(E10;E14:E17)*E18-IF(E19
    public static void main(字符串[]args){
    
    String formula=“E10+E11+SUM(E10;E14:E17)*E18-IF(E19在链接的第一个线程上,页面上找不到链接下方的正则表达式。您真的在使用该页面中的正则表达式吗?建议使用的正则表达式是:

    (\w+|)?\$?(?:\bXF[A-D]|X[A-E][A-Z]|[A-W][A-Z]{2}|[A-Z]{2}|[A-Z])\$?(?:104857[0-6]|10485[0-6]\d|1048[0-4]\d{2}|104[0-7]\d{3}|10[0-3]\d{4}|[1-9]\d{1,5}|[1-9])d?\b(:\s?\$?(?:\bXF[A-D]|X[A-E][A-Z]|[A-W][A-Z]{2}|[A-Z]{2}|[A-Z])\$?(?:104857[0-6]|10485[0-6]\d|1048[0-4]\d{2}|104[0-7]\d{3}|10[0-3]\d{4}|[1-9]\d{1,5}|[1-9])d?\b)?
    
    试试看


    此外,了解哪些特定字符串没有正确匹配也会有所帮助,因为您提到了其中一些字符串是有效的。

    这不是一个好答案。有些函数名可能会与单元格字母(例如SUM)混淆,并且您的代码也不考虑单元格编号(例如,它应该返回
    E10
    ,而不仅仅是
    e
    )。答案与问题不匹配。但无论如何,谢谢。。也许我可以通过按正则表达式拆分来更轻松地得到答案…我将尝试一些方法。我很抱歉。我忘记了数字。我已编辑了答案以包含数字。@Solace这样更好,但它仍然无法解决我提到的其他问题-您需要考虑bu函数中的ilt,例如
    Yr1990()
    也许OP可以编写一个函数来检查当前字符串是否为单元格。感谢您的回答。也许我在复制和粘贴中遗漏了一些内容……但我尝试了您提供的字符串。使用此字符串,以下测试数据正在工作:S16*S15和E10+E11+SUM(E10;E14:E17)*E18-IF(E19@user3373589但哪些字符串不起作用?例如(S10+S14+S18+S22+S26+S30+S34)和SUM(E14:E19)
    public static void main(String[]args){
    String formula = "E10+E11+SUM(E10;E14:E17)*E18-IF(E19<1,E20, E21)";
    String output="";
    
    
    for(String c: formula.split("[^A-z0-9]+")){
        if(isCell(c)){
                   output+=c+" ";
        }
    }
    
    
    }
    
    private static boolean isCell(String current){
       boolean hasLetter = false;
       boolean hasNumber = false;
    
    for(int i=0; i<current.length() && (!hasLetter || !hasNumber); i++){
    
    
        if(current.charAt(i)>=65 && current.charAt(i)<=90){
    
    
            hasLetter=true;
        }
        else if(current.charAt(i)>='0' && current.charAt(i)<='9'){
    
            hasNumber=true;
        }
    }
    
    return hasLetter && hasNumber;
    }
    
    (\w+|)?\$?(?:\bXF[A-D]|X[A-E][A-Z]|[A-W][A-Z]{2}|[A-Z]{2}|[A-Z])\$?(?:104857[0-6]|10485[0-6]\d|1048[0-4]\d{2}|104[0-7]\d{3}|10[0-3]\d{4}|[1-9]\d{1,5}|[1-9])d?\b(:\s?\$?(?:\bXF[A-D]|X[A-E][A-Z]|[A-W][A-Z]{2}|[A-Z]{2}|[A-Z])\$?(?:104857[0-6]|10485[0-6]\d|1048[0-4]\d{2}|104[0-7]\d{3}|10[0-3]\d{4}|[1-9]\d{1,5}|[1-9])d?\b)?