如何在列表上进行模式匹配('(',列表[字符],')')?

时间:2016-09-30 13:45:54

标签: scala pattern-matching

我在List [Char]上的一些模式匹配上苦苦挣扎。我想提取括号括起来的子列表。所以,我想提取"测试"作为列表[Char]给出"(test)"。所以基本上匹配列表('(',列表[字符],')')。我可以匹配列表('(',t,')')其中t是单个字符,但不是可变数量的字符。

应如何宣布?

val s = "(test)" 
s match {
    case List('(',t,')') => {
        println("matches single character")
    }
    case '('::x::y => {
       //x will be the first character in the List[Char] (after the '(') and y the tail  
  }
} 

1 个答案:

答案 0 :(得分:4)

s match {
  case '(' +: t :+ ')' => ...
}

阅读Scala中的自定义提取器,然后查看http://www.scala-lang.org/api/2.11.8/index.html#scala.collection。$ colon $ plus $以了解它是如何工作的。

请注意,它会匹配任何合适的Seq[Char],但字符串不是真的一个;它只能被转换(隐式或显式)。所以你可以使用

之一
val s: Seq[Char] = ...some String or List[Char]
val s = someString.toSeq

我希望String的性能应该足够好(如果它很关键,不要使用它);但对于大List[Char],这将非常缓慢。