当前位置: 首页 > 知识库问答 >
问题:

Regex解析逗号分隔的数字范围列表,并在各个组中捕获它们

王豪
2023-03-14

我找到了以下用于匹配逗号分隔的数字或数字范围的regex:

val reg = """^(\d+(-\d+)?)(,\s*(\d+(-\d+)?))*$""".r
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")

共有1个答案

汪德寿
2023-03-14

使用findallin时,不应尝试匹配整个字符串。它将被它能找到的最大的连续匹配所分裂。相反,您需要的只是Regex的一部分:

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)
 类似资料: