使用java中的正则表达式提取excel中的所有单元格引用
拥有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]|
- (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
)。答案与问题不匹配。但无论如何,谢谢。。也许我可以通过按正则表达式拆分来更轻松地得到答案…我将尝试一些方法。我很抱歉。我忘记了数字。我已编辑了答案以包含数字。@Solace这样更好,但它仍然无法解决我提到的其他问题-您需要考虑bu函数中的ilt,例如e
也许OP可以编写一个函数来检查当前字符串是否为单元格。感谢您的回答。也许我在复制和粘贴中遗漏了一些内容……但我尝试了您提供的字符串。使用此字符串,以下测试数据正在工作:S16*S15和E10+E11+SUM(E10;E14:E17)*E18-IF(E19@user3373589但哪些字符串不起作用?例如(S10+S14+S18+S22+S26+S30+S34)和SUM(E14:E19)Yr1990()
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)?