java - 使用模式从 Excel 公式中提取列名称

标签 java regex excel formula

我正在尝试从 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));
}

ideone demo

.* 消耗了所有其他匹配,而且您实际上并不需要将整个公式与模式/匹配器进行匹配。

关于java - 使用模式从 Excel 公式中提取列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20903229/

相关文章:

java - Rhino:原型(prototype)链接不适用于宿主对象?

java - 正则表达式 : filter a character in an expression but not inside the quotation mark

sql - Oracle regexp_substr - 如何提取不包括标记字符的文本

excel - 将变量放入 Excel VBA 函数时出错

html - excel截断从html中提取的非常大的整数

java - Libgdx json 文件初始游戏值

java - 从 UML 类图中派生抽象类和接口(interface)

java - 同一线程上的可重入ReadWriteLock

PHP 尝试将段落拆分成句子。保留标点符号

excel - sumif 其中行范围由另一个单元格确定