java使用模式从Excel公式中提取列名
我试图从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"
但它只显示“Column name=AC”
{cd1}我不知道我的第一部分是如何匹配的
提前感谢你的帮助
# 1 楼答案
你把事情搞得太复杂了。您只需匹配一个或多个字母,并声明后面跟一个数字:
模式的第一部分匹配一个或多个
A-Za-z
,然后使用正向前瞻断言此模式后面跟着一个数字例如:
输出:
# 2 楼答案
只需删除所有的
.*
,您就不需要\\W
,除非您的公式中也有该格式的文本(在这种情况下,您必须在应用正则表达式之前删除引号中的所有内容):ideone demo
.*
消耗了所有其他匹配项,而且您实际上不需要使用pattern/matcher匹配整个公式