根据Scala中重复的正则表达式拆分字符串

时间:2014-12-25 06:25:59

标签: regex scala

在Scala中,我有一个

形式的字符串
val str = "[ab][bc][cd][dx][42]"

Scala中最有效的方法是什么,正则表达式利用或以其他方式将该字符串拆分为Seq[String]形式:

("ab","bc","cd","dx","42")

谢谢。

5 个答案:

答案 0 :(得分:6)

你可以试试这个:

val str = "[ab][bc][cd][dx][42]"
val res = str.drop(1).sliding(2, 4).toList
println(res) // List(ab, bc, cd, dx, 42)

val str2 = "[ab]"
val res2 = str2.drop(1).sliding(2, 4).toList
println(res2) // List(ab)

val str3 = ""
val res3 = str3.drop(1).sliding(2, 4).toList
println(res3) // List()

答案 1 :(得分:4)

你可以尝试:

str.split("(\\]\\[)|(\\[)|(\\])").filterNot(_.isEmpty)

主要使用组(][, ], [)进行分隔和修剪数组。

答案 2 :(得分:2)

您可以使用此正则表达式:

(?<=\[)([^]]+)(?=\])

RegEx Demo

<强>代码:

scala> val re = "(?<=\\[)([^]]+)(?=\\])".r
re: scala.util.matching.Regex = (?<=\[)([^]]+)(?=\])

scala> for(m <- re.findAllIn("[ab][bc][cd][dx][42]")) println(m)
ab
bc
cd
dx
42

答案 3 :(得分:1)

假设][是任意两个连续项之间的分隔符,请考虑

str.drop(1).dropRight(1).split("\\]\\[")

递送

Array("ab", "bc", "cd", "dx", "42")

<强>更新

一种更为通用的方法,我们定义String分隔符,

implicit class Spl(val str: String) extends AnyVal {
  def regSplit(leftDel: String, rightDel: String) = 
    str.stripPrefix(leftDel).stripSuffix(rightDel).split(rightDel+leftDel)
}

因此

str.regSplit("\\[","\\]")
res: Array[String] = Array([ab, bc, cd, dx, 42])

答案 4 :(得分:0)

\[([^\]]+)\]

最简单,最合乎逻辑的方法是匹配而不是拆分。只需匹配并抓取捕获或组1.参见演示。

https://regex101.com/r/gQ3kS4/42