Scala:标记简单的算术表达式

Scala: Tokenizing simple arithmetic expressions

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

我尝试了 splitsplitAt 之类的方法,但没有得到想要的结果。

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

试试

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

在此特定示例中,它为您提供:

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

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

我建议根据您想要的标记进行匹配。 例如

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