scala.MatchError:使用正则表达式提取字符串
我正在研究scala模式匹配 对于下面的程序,我得到了输出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 水果:串=香
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没问题,如果您有任何其他疑问,请编辑您的问题。否则,请接受此答案,以便其他人知道此问题已解决。接受您的答案。非常感谢。