我找到the following regex来匹配逗号分隔的数字或数字范围:
val reg = """^(\d+(-\d+)?)(,\s*(\d+(-\d+)?))*$""".r
虽然这个匹配有效字符串,但我只得到一个字符串,而不是一个字符串列表,每个对应于其中一个分开的条目。 E.g。
reg.findAllIn("1-2, 3").map(s => s""""$s"""").toList
给出
List("1-2, 3")
但我想:
List("1-2", "3")
以下内容更接近:
val list = "1-2, 3" match {
case Reg(groups @ _*) => groups
case _ => Nil
}
list.map(s => s""""$s"""")
但它包含各种'垃圾':
List("1-2", "-2", ", 3", "3", "null")
答案 0 :(得分:3)
使用findAllIn
,您不应该尝试匹配整个字符串。它会被它能找到的最大连续比赛分开。相反,你需要的只是正则表达式的一部分:
val reg = """(\d+(-\d+)?)""".r
如果您将其与findAllIn
一起使用,它将返回您需要的内容。
scala> val x = """(\d+(-\d+)?)""".r
x: scala.util.matching.Regex = (\d+(-\d+)?)
scala> x.findAllIn("1-2, 3").toList
res0: List[String] = List(1-2, 3)