首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由excel条件拆分

由excel条件拆分
EN

Stack Overflow用户
提问于 2014-06-18 09:23:41
回答 3查看 56关注 0票数 0

我想拆开这条线:

=IF(BI18=0;INT(YEAR(TODAY()));IF(INT(YEAR(BI18))>2025;2025;INT(YEAR(BI18))))

代码语言:javascript
复制
[IF, BI18=0, INTYEARTODAY, IF, INTYEARBI18>2025,  2025, INTYEARBI18]

我试过用那个正则表达式:

String[] result = text.substring(1, text.length()).split("[;()]+");

然而,我得到的是:

[IF, BI18=0, INT, YEAR, TODAY, IF, INT, YEAR, BI18, >2025, 2025, INT, YEAR, BI18]

我正努力从总体上识别excel方法。

我很感激你的回答,按预期一般地拆分字符串。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-18 09:36:27

后续的注释,如果您想要的主要内容的IF(...)条件,其中的...是内容,这里有一个快速解决方案。

请注意,尽管此解决方案适用于手头的输入,但在其他情况下,使用嵌套语句可能是不可靠的--基本上是一个解决方案。

代码语言:javascript
复制
String formula = "=IF(BI18=0;INT(YEAR(TODAY()));IF(INT(YEAR(BI18))>2025;2025;INT(YEAR(BI18))))";
//                            | positive lookbehind: starts with "IF("
//                            |        | any character, reluctantly quantified
//                            |        |  | positive lookahead, followed by 
//                            |        |  | ")", then...
//                            |        |  |     | ";" or end of input
//                            |        |  |     | 
Pattern p = Pattern.compile("(?<=IF\\().+?(?=\\)(;|$))");
Matcher m = p.matcher(formula);
while (m.find()) {
    System.out.println(m.group());
}

输出

代码语言:javascript
复制
BI18=0;INT(YEAR(TODAY())
INT(YEAR(BI18))>2025;2025;INT(YEAR(BI18)))
票数 1
EN

Stack Overflow用户

发布于 2014-06-18 09:35:43

你可以用这个正则表达式。在演示中,确保查看右边的捕获组。

代码语言:javascript
复制
^=([^(]+)\(|\G([^;]+)[;|)$]

我们从捕获组1和2中检索匹配。

在Java中,这意味着如下所示:

代码语言:javascript
复制
Pattern regex = Pattern.compile("^=([^(]+)\\(|\\G([^;]+)[;|)$]");
Matcher regexMatcher = regex.matcher(your_original_string);
while (regexMatcher.find()) {
  // check Group 1, which is regexMatcher.group(1)
  // check Group 2, which is regexMatcher.group(2)
  }
票数 1
EN

Stack Overflow用户

发布于 2014-06-18 09:44:52

试试看

代码语言:javascript
复制
String str1 = "=IF(BI18=0;INT(YEAR(TODAY()));IF(INT(YEAR(BI18))>2025;2025;INT(YEAR(BI18))))";

ArrayList<String> strList = new ArrayList<String>();

for(String str2 : str1.replaceFirst("=", "").split(";")){
    if(str2.contains("IF")){
        strList.add("IF");
        strList.add(str2.replaceAll("IF|\\(|\\)", ""));
    }else{
        strList.add(str2.replaceAll("\\(|\\)", ""));
    }   
}

System.out.println(strList.toString());

输出:

代码语言:javascript
复制
[IF, BI18=0, INTYEARTODAY, IF, INTYEARBI18>2025, 2025, INTYEARBI18]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24281789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档