Scala:模式匹配字符串开头的零或多个

Scala:模式匹配字符串开头的零或多个,scala,Scala,如何进行模式匹配以匹配到最后一个元素的所有元素 例如,假设我有一个未解析的等式: object MyObject { def unapplySeq(money: String): Option[List[Char]] = { val amount = money.trim.toList if (amount.isEmpty) None else Some(amount) } } 我尝试以下匹配: "12.15 €" match { case

如何进行模式匹配以匹配到最后一个元素的所有元素

例如,假设我有一个未解析的等式:

object MyObject {
  def unapplySeq(money: String): Option[List[Char]] = {
    val amount = money.trim.toList
    if (amount.isEmpty) None
    else
      Some(amount)
  }
}
我尝试以下匹配:

"12.15 €" match {
    case MyObject('$' , last @ _*) =>   s"${last.mkString} dollars"

    // this is wrong
    case MyObject(first @ _*, '€') =>   s"${last.mkString} euro"  

    case _ => "Unknown format"
}

例如,我可以在120.10美元的情况下对我们的金额执行此操作,但如何重写第二个大小写以匹配符号位于末尾的欧元字符串?

这对于正则表达式来说非常简单

def currency(s: String) {
  val dollar = """\$(.+)""".r
  val euro = """(.+)€""".r  
  s match {
    case dollar(amt) => println(amt + " dollars")
    case euro(amt) => println(amt + " euros")
    case _ => println("unknown currency")
  }
}

scala> currency("$1346.00")
1346.00 dollars

scala> currency("1346.00€")
1346.00 euros

对于正则表达式,这将非常简单

def currency(s: String) {
  val dollar = """\$(.+)""".r
  val euro = """(.+)€""".r  
  s match {
    case dollar(amt) => println(amt + " dollars")
    case euro(amt) => println(amt + " euros")
    case _ => println("unknown currency")
  }
}

scala> currency("$1346.00")
1346.00 dollars

scala> currency("1346.00€")
1346.00 euros

对于正则表达式,这将非常简单

def currency(s: String) {
  val dollar = """\$(.+)""".r
  val euro = """(.+)€""".r  
  s match {
    case dollar(amt) => println(amt + " dollars")
    case euro(amt) => println(amt + " euros")
    case _ => println("unknown currency")
  }
}

scala> currency("$1346.00")
1346.00 dollars

scala> currency("1346.00€")
1346.00 euros

对于正则表达式,这将非常简单

def currency(s: String) {
  val dollar = """\$(.+)""".r
  val euro = """(.+)€""".r  
  s match {
    case dollar(amt) => println(amt + " dollars")
    case euro(amt) => println(amt + " euros")
    case _ => println("unknown currency")
  }
}

scala> currency("$1346.00")
1346.00 dollars

scala> currency("1346.00€")
1346.00 euros

可能,正则表达式在表示“startsWith”和“endsWith”时有些过分

一个简单的提取器可以完成这项工作,但是列表化字符串来完成这项工作要比字符串化列表低一个档次

scala> object Currency { def unapply(s: String): Option[(Char, String)] =
     | if (s.head == '$') Some('$',s.tail)
     | else if (s.last == '€') Some('€',s.init) else None }
defined object Currency

scala> def currency(s: String) = s match { case Currency(c, amt) => s"$amt of $c" case _ => "unknown" }
currency: (s: String)String

scala> currency("$120.10")
res2: String = 120.10 of $

scala> currency("1346.00€")
res3: String = 1346.00 of €

毫无疑问,您真的会提取货币枚举和数字。

可能,正则表达式在表示“startsWith”和“endsWith”时有些过分

一个简单的提取器可以完成这项工作,但是列表化字符串来完成这项工作要比字符串化列表低一个档次

scala> object Currency { def unapply(s: String): Option[(Char, String)] =
     | if (s.head == '$') Some('$',s.tail)
     | else if (s.last == '€') Some('€',s.init) else None }
defined object Currency

scala> def currency(s: String) = s match { case Currency(c, amt) => s"$amt of $c" case _ => "unknown" }
currency: (s: String)String

scala> currency("$120.10")
res2: String = 120.10 of $

scala> currency("1346.00€")
res3: String = 1346.00 of €

毫无疑问,您真的会提取货币枚举和数字。

可能,正则表达式在表示“startsWith”和“endsWith”时有些过分

一个简单的提取器可以完成这项工作,但是列表化字符串来完成这项工作要比字符串化列表低一个档次

scala> object Currency { def unapply(s: String): Option[(Char, String)] =
     | if (s.head == '$') Some('$',s.tail)
     | else if (s.last == '€') Some('€',s.init) else None }
defined object Currency

scala> def currency(s: String) = s match { case Currency(c, amt) => s"$amt of $c" case _ => "unknown" }
currency: (s: String)String

scala> currency("$120.10")
res2: String = 120.10 of $

scala> currency("1346.00€")
res3: String = 1346.00 of €

毫无疑问,您真的会提取货币枚举和数字。

可能,正则表达式在表示“startsWith”和“endsWith”时有些过分

一个简单的提取器可以完成这项工作,但是列表化字符串来完成这项工作要比字符串化列表低一个档次

scala> object Currency { def unapply(s: String): Option[(Char, String)] =
     | if (s.head == '$') Some('$',s.tail)
     | else if (s.last == '€') Some('€',s.init) else None }
defined object Currency

scala> def currency(s: String) = s match { case Currency(c, amt) => s"$amt of $c" case _ => "unknown" }
currency: (s: String)String

scala> currency("$120.10")
res2: String = 120.10 of $

scala> currency("1346.00€")
res3: String = 1346.00 of €

毫无疑问,您确实可以提取货币枚举和数字。

谢谢。我考虑过regex,可能会朝这个方向发展。然而,似乎任何想实现之前方法的人都被一只鸟、一只松鼠或其他东西分散了注意力,没有想到实现其他常见的变体。我在努力确保我没有错过我发布的非正则表达式方法中的某些内容。谢谢。我考虑过regex,可能会朝这个方向发展。然而,似乎任何想实现之前方法的人都被一只鸟、一只松鼠或其他东西分散了注意力,没有想到实现其他常见的变体。我在努力确保我没有错过我发布的非正则表达式方法中的某些内容。谢谢。我考虑过regex,可能会朝这个方向发展。然而,似乎任何想实现之前方法的人都被一只鸟、一只松鼠或其他东西分散了注意力,没有想到实现其他常见的变体。我在努力确保我没有错过我发布的非正则表达式方法中的某些内容。谢谢。我考虑过regex,可能会朝这个方向发展。然而,似乎任何想实现之前方法的人都被一只鸟、一只松鼠或其他东西分散了注意力,没有想到实现其他常见的变体。我试图确保我没有错过我发布的非正则表达式方法中的某些东西。