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