0

你们能告诉我我在尝试使用正则表达式模式匹配进行提取时做错了什么吗?我有以下代码

val Pattern = "=".r
val Pattern(key, value) = "key=value"

我在运行时遇到以下异常

Exception in thread "main" scala.MatchError: key=value (of class java.lang.String)
4

1 回答 1

5

这更像是一个正则表达式问题:您的正则表达式不捕获任何组,它只匹配一个=字符。

val Pattern = "([^=]*)=(.*)".r

你会得到:

scala> val Pattern(key, value) = "key=value"
key: String = key
value: String = value

编辑

此外,如果输入字符串为空,则不匹配。您可以更改模式以使其匹配,或者(更好)您可以使用正则表达式进行模式匹配,如下所示:

"key=value" match {
   case Pattern(k, v) => // do something 
   case _ => // wrong input, do nothing
}

如果您真正想要的是使用正则表达式匹配的任何内容拆分输入文本,那么也可以使用Regex.split

scala> val Pattern = "=".r
Pattern: scala.util.matching.Regex = =

scala> val Array(key, value) = Pattern.split("key=value")
key: String = key
value: String = value
于 2013-05-03T08:53:47.070 回答