在scala正则表达式中捕获单词,数字和连字符

时间:2017-12-01 06:36:01

标签: regex scala

我有一个包含单词/数字的字符串,可以选择在中间包含连字符。我试图在Scala中使用正则表达式捕获此字符串。 我尝试了[\w\d-]+[\w\d\-]+,但这总是返回null。如何用连字符捕获单词/数字?

eginput string = Abc1-LT.json

用法:

val pattern = """^([\w\d-]+).json$""".r
pattern.findFirstMatchIn(name) match {
      case Some(m) => try{
          m.subgroups.mkString("-")
      }
..

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,在Scala中,默认情况下会编译正则表达式模式,因此不需要^$\d\w的子集,因此也不需要。

接下来,您的模式中只有一个捕获组,因此subgroups结果中只能有一个条目。这意味着mkString()不能在组之间放置任何内容,因为它们之间没有。

最后,有一种更简单的方法来提取单个捕获组。

val pattern = """([\w-]+).json""".r

name match {
  case pattern(sub) => s"-->$sub<--"  //res0: String = -->Abc1-LT<--
  case _ => "no match"
}