Scala:标记简单的算术表达式
Scala: Tokenizing simple arithmetic expressions
如何将 23+3*5
或 2 + 3*5
拆分为列表 List("23", "+", "3", "*", "5")
?
我尝试了 split
、splitAt
之类的方法,但没有得到想要的结果。
我希望它在算术运算符处拆分。
试试
"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)
如何将 23+3*5
或 2 + 3*5
拆分为列表 List("23", "+", "3", "*", "5")
?
我尝试了 split
、splitAt
之类的方法,但没有得到想要的结果。
我希望它在算术运算符处拆分。
试试
"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)