我正在尝试从 Excel 公式中提取列名称,但通过以下代码我只能得到最新的名称:
String formula = "IF(AB13=0,0,IF(+I13/AC13>100%,100%,+I13/AC13))";
Matcher matcher = Pattern.compile(".*\\W([A-Z]+)\\d+.*").matcher(formula);
while (matcher.find()) {
System.out.println("Column name= "+matcher.group(1));
}
我希望它能显示
"Column name= AB"
"Column name= I"
"Column name= AC"
"Column name= I"
"Column name= AC"
但它只显示“列名称= AC”。
我发现我的模式的第一个“.*”与 formula => IF(AB13=0,0,IF(+I13/AC13>100%,100%,+I13
的整个第一部分匹配。但我不知道如何让它匹配所有的可能性。
预先感谢您的帮助。
最佳答案
只需删除所有 .*
并且您实际上并不需要 \\W
除非您的公式中也有该格式的文本(其中在这种情况下,您必须在应用正则表达式之前删除引号内的所有内容):
String formula = "IF(AB13=0,0,IF(+I13/AC13>100%,100%,+I13/AC13))";
Matcher matcher = Pattern.compile("([A-Z]+)\\d+").matcher(formula);
while (matcher.find()) {
System.out.println("Column name= "+matcher.group(1));
}
.*
消耗了所有其他匹配,而且您实际上并不需要将整个公式与模式/匹配器进行匹配。
关于java - 使用模式从 Excel 公式中提取列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20903229/