【发布时间】:2019-08-06 17:09:55
【问题描述】:
如何将23+3*5 或2 + 3*5 拆分为列表List("23", "+", "3", "*", "5")?。
我尝试了split、splitAt 之类的方法,但都没有达到预期的结果。
我希望它在算术运算符处拆分。
【问题讨论】:
标签: regex scala split tokenize calculation
如何将23+3*5 或2 + 3*5 拆分为列表List("23", "+", "3", "*", "5")?。
我尝试了split、splitAt 之类的方法,但都没有达到预期的结果。
我希望它在算术运算符处拆分。
【问题讨论】:
标签: regex scala split tokenize calculation
试试类似的东西
"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)
【讨论】: