【发布时间】:2016-05-26 15:38:47
【问题描述】:
我正在尝试离开
val s: String = "sometextHere[a][b][c]"
到
val x = "sometextHere"
val y = List("a", "b", "c")
“[...]”的数量是 1+。 我有一些很老套的东西,但我觉得必须有更好的解决方案
val bracketMatcher = "\\[(\\w+)\\]".r
val listMatcher = s"^(\\w+)((?:$bracketMatcher)+)".r
listMatcher.findAllIn(chunk) match {
case matchIterator if matchIterator.hasNext =>
val matchData = matchIterator.matchData.next()
val indexesMatch = bracketMatcher.findAllIn(matchData.group(2)).matchData.flatMap(_.subgroups).toList
val a = matchData.group(1) // This is "sometextHere"
val b = indexesMatch // This is List("a", "b", "c")
case _ => ...
【问题讨论】:
-
这有可能变得非常混乱。如果您有奇数个方括号和/或顺序错误,和/或在字符串的不同部分,会发生什么情况。即
val s: String = "some[[d]x[e]]][[textHere[a][b][c]" -
好点,但是在这种情况下,我只对完全匹配此模式的情况感兴趣,任何比这更复杂的(嵌套括号等)都不应该匹配。