在scala中查找正则表达式中的组数

时间:2016-02-16 06:29:26

标签: regex scala

在我的Scala代码中,有一个用户定义的函数,它接受一个源字符串和正则表达式。正则表达式中存在的组的数量应该动态地将字符串中的值拆分为不同的变量。 例如

SPLIT("REGEX 90",'(\w+)\s+(\d+)')

应返回一个List [String],其值​​为group,因此值返回 列表将是

List("REGEX","90")

我可以计算正则表达式中存在的组的数量然后拆分的东西但是这将具有非常复杂的逻辑。我相信scala必须具有内置函数,其可以动态地对正则表达式匹配值进行分组。

1 个答案:

答案 0 :(得分:0)

您可以使用出色的Scala正则表达式支持。

首先定义正则表达式:

scala> val regex = """(\w+)\s+(\d+)""".r
regex: scala.util.matching.Regex = (\w+)\s+(\d+)

如果您只想捕获2组,请使用模式匹配:

scala> "REGEX   90" match { case regex(word, number) => s"word: $word, number: $number" }
res2: String = word: REGEX, number: 90

如果您想要列表中所有匹配的组,则需要获取隐含存在的第一组sub的子组m并匹配整个字符串:

 (for { m <- regex findAllMatchIn "REGEX   90"; sub <- m subgroups } yield sub) toList
res3: List[String] = List(REGEX, 90)

如果您想简化一点并且不关心匹配数字,那么:

scala> (for { words <- """\w+""".r findAllIn "REGEX   90" } yield words) toList
res4: List[String] = List(REGEX, 90)

如果您需要更多示例或想要查看其他可用方法,请查看docs