scala.MatchError:使用正则表达式提取字符串

时间:2016-01-16 04:58:19

标签: scala

我正在进行scala模式匹配。

对于下面的程序,我得到输出。

   val pattern = "([0-9]+) ([A-Za-z]+)".r

   val pattern(count,fruit) ="100 bananas"

程序的输出是

count:String = 100 水果:String =香蕉

我通过在模式val对象中再添加一个数字模式以及在提取模式val中再添加一个对象来修改程序以加深理解。

该计划

  val pattern = "([0-9]+) ([A-Za-z]+)  ([0-9]+) ".r

  val pattern(count, fruit, price) ="100 bananas 1002"

但该程序没有编译,它正在抛出错误。错误是 -

scala.MatchError: 100 bananas 1002 (of class java.lang.String)
at #worksheet#.x$1$lzycompute(ExtractingStrings.sc0.tmp:6)
at #worksheet#.x$1(ExtractingStrings.sc0.tmp:6)
at #worksheet#.count$lzycompute(ExtractingStrings.sc0.tmp:6)
at #worksheet#.count(ExtractingStrings.sc0.tmp:6)
at #worksheet#.#worksheet#(ExtractingStrings.sc0.tmp:6)

任何人都可以解释为什么它会抛出这个错误。提前谢谢。

1 个答案:

答案 0 :(得分:4)

该程序编译得很好。您得到的是运行时异常(scala.MatchError)。

这是因为您的第二个模式"([0-9]+) ([A-Za-z]+) ([0-9]+) "([A-Za-z]+)之后有2个空格,而在([0-9]+)100 bananas 1002之后的另一个空格与该模式不匹配(一个空格)在bananas之后1002之后没有空格。

删除这些空格,将模式更改为([0-9]+) ([A-Za-z]+) ([0-9]+)",它将起作用。

scala> val pattern = "([0-9]+) ([A-Za-z]+) ([0-9]+)".r
pattern: scala.util.matching.Regex = ([0-9]+) ([A-Za-z]+) ([0-9]+)

scala> val pattern(count, fruit, price) ="100 bananas 1002"
count: String = 100
fruit: String = bananas
price: String = 1002