java - 按excel条件分割

标签 java regex

我想分割这个字符串:

=IF(BI18=0;INT(年份(TODAY()));IF(INT(年份(BI18))>2025;2025;INT(年份(BI18))))

[IF, BI18=0, INTYEARTODAY, IF, INTYEARBI18>2025,  2025, INTYEARBI18]

我用正则表达式尝试过:

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

但是,我得到:

[IF、BI18=0、INT、年份、今天、IF、INT、年份、BI18、>2025、2025、INT、年份、BI18]

我正在努力识别一般的 Excel 方法。

非常感谢您的回答,按照预期一般分割字符串。

最佳答案

根据评论,如果您想要 IF(...) 条件的主要内容,其中 ... 是内容,这里有一个快速解决方案。

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

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());
}

输出

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

关于java - 按excel条件分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24281789/

相关文章:

java - 使用自定义提供程序的 Spring Boot 安全性

java - 在 Java Spring/Hibernate/Maven 项目中测试多步骤过程的正确方法是什么?

java - 如何在 HashMap 中保留未确定的数据类型?

java - 为什么 jvm 命令 `jinfo` 在 alpine openjdk8 发行版中没有 `-flags`?

regex - Shell - 这个命令有什么作用?

java - 如何使用 JAVA EE 获取用于下载文件的 HttpServletResponse 实例

python - 使用 Python 和 Regex 提取不同格式的日期

R Strsplit 将分隔符保留在第二个元素中

c# - 排除以特定字符开头的正则表达式匹配

regex - 使用正则表达式否定前瞻排除确切的字符串