我有一个包含单词/数字的字符串,可以选择在中间包含连字符。我试图在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("-")
}
..
谢谢!
答案 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"
}