【问题标题】:Scala: Tokenizing simple arithmetic expressionsScala:标记简单的算术表达式
【发布时间】:2019-08-06 17:09:55
【问题描述】:

如何将23+3*52 + 3*5 拆分为列表List("23", "+", "3", "*", "5")?。

我尝试了splitsplitAt 之类的方法,但都没有达到预期的结果。

我希望它在算术运算符处拆分。

【问题讨论】:

    标签: regex scala split tokenize calculation


    【解决方案1】:

    试试类似的东西

    "2 + 4 - 3 * 5 / 7 / 3".split("(?=[+/*-])|(?<=[+/*-])").map(_.trim)
    

    在这个特定的示例中,它为您提供:

    Array(2, +, 4, -, 3, *, 5, /, 7, /, 3)
    

    (?= ) 是前瞻,(?&lt;= ) 是后瞻。本质上,它会在每个运算符之前和之后切割字符串。请注意,[+/*-] 中的 - 位于最后一个位置:否则将被解释为字符范围(例如 [a-z])。

    【讨论】:

      【解决方案2】:

      我建议匹配你想要的标记。 例如

      "\\d+|[-+*/]".r.findAllIn(" 23 + 4 * 5 / 7").toList
      // List(23, +, 4, *, 5, /, 7)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-25
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        • 2016-10-17
        • 1970-01-01
        • 1970-01-01
        • 2015-07-02
        相关资源
        最近更新 更多