java - Java中中缀表达式的正则表达式问题

标签 java regex

我正在尝试创建一个 Java 程序,它能够在输入中缀表达式时遵循操作顺序。为了简化输入,我决定最好使用 regex 拆分整个字符串。表达。我已经能够拆分除 6 3 之外的所有内容融入自己String splitLine 中的值大批。我的 SSCCE 尝试如下:

    String line = "6 + 5 + 6  3 + 18";
    String regex = "(?<=[-+*/()])|(?=[-+*/()])";   //Not spitting 6 3 correctly
    String[] splitLine = line.split(regex);
    for (int i=0; i<splitLine.length; i++) {
        System.out.println(splitLine[i]);
    }

输出:

6
+
5
+
6  3 //Error here
+
18

预期输出:

6
+
5
+
6    //Notice
3    //these
+
18

我尝试并尝试修改我的正则表达式,但都没有成功。谁能告诉我为什么我的正则表达式没有拆分 63融入自己StringssplitLine大批?

编辑: 只是想指出我这样做是为了好玩,而不是为了任何学校作业等。我只是想看看我是否可以编写一个程序来执行简单的中缀表达式。我确实同意有更好的方法可以做到这一点,如果表达式变得更复杂,我会遇到一些问题。但不幸的是,这就是我的书建议我执行此步骤的方式。

再次感谢所有的快速评论和回答!

最佳答案

试试这个:(?<=[-+*/()])|(?=[-+*/()]|\\s{2,})

您可以尝试在正则表达式中添加一个空格,当有 2 个或更多空格时这也会拆分,因为在这种情况下 6 和 3 由空格分隔,6 3也会分开。如果匹配超过 2 个空格,此正则表达式将吐出字符串。您可以将最小空间数更改为 \s{min,}在正则表达式中

关于java - Java中中缀表达式的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19086817/

相关文章:

java - Maven 依赖项失败并出现 501 错误

java - 需要将 RAW 打印数据转换为 ps/pdf 或从 Java 打印

regex - 我需要从正则表达式中排除单词

java - 为什么网站抓取要花很长时间?

regex - 从 shell 编辑一行配置文件

java - 如何在 Sparkjava 中启动服务器?

java - System.out.println 从多个 java 源文件中删除/注释

java - Java中耗时不一致

c# - 无法识别捕获组的 RegEx

regex - 我只希望Regex仅搜索拼写错误-如何排除正确的拼写?