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

scala.MatchError:使用正则表达式提取字符串,scala,Scala,我正在研究scala模式匹配 对于下面的程序,我得到了输出 val pattern = "([0-9]+) ([A-Za-z]+)".r val pattern(count,fruit) ="100 bananas" 程序的输出是 val pattern = "([0-9]+) ([A-Za-z]+) ([0-9]+) ".r val pattern(count, fruit, price) ="100 bananas 1002" 计数:字符串=100 水果:串=香

我正在研究scala模式匹配

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

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

   val pattern(count,fruit) ="100 bananas"
程序的输出是

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

  val pattern(count, fruit, price) ="100 bananas 1002"
计数:字符串=100 水果:串=香蕉

我修改了程序以获得更深入的理解,在pattern val对象中添加了一个数字模式,在extraction pattern 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)

有人能解释为什么它会抛出这个错误吗。提前谢谢。

程序正在编译中。您得到的是一个运行时异常()

这是因为您的第二个模式
([0-9]+)([A-Za-z]+)([0-9]+)”
后面有两个空格([A-Za-z]+)),在
([0-9]+)
100香蕉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

我已按照您的建议更改了模式。它不起作用。val pattern=“([0-9]+)([A-Za-z]+)([0-9]+)”。r@RajkumarNatarajan没问题,如果您有任何其他疑问,请编辑您的问题。否则,请接受此答案,以便其他人知道此问题已解决。接受您的答案。非常感谢。