如何使用正則表達式對數組中的第一個字符串元素進行模式匹配?使用正則表達式的Scala數組模式匹配
考慮例如
Array("col",1) match {
case Array("""col | row""", n, _*) => n
case _ => 0
}
它提供0
,雖然期望的結果將是1。
非常感謝。
如何使用正則表達式對數組中的第一個字符串元素進行模式匹配?使用正則表達式的Scala數組模式匹配
考慮例如
Array("col",1) match {
case Array("""col | row""", n, _*) => n
case _ => 0
}
它提供0
,雖然期望的結果將是1。
非常感謝。
一個Regex
例如自動提供的提取,這樣你就可以在一個模式匹配表達式直接使用一個:
val regex = "col|row".r
Array("col",1) match {
case Array(regex(), n, _*) => n
case _ => 0
}
另外:在繞Scala的正則表達式更一般的QA,sschaef有provided a very nice string interpolation for pattern matching usage(如在本例中爲)。一個潛在的警告:插值會在每次調用時創建一個新的Regex
實例 - 因此,如果您使用相同的正則表達式很多次,它可以更有效地將它存儲在val
而不是(如此答案中)。
不知道這是否是最好的解決辦法,但工作之一:
Array("col", 1) match {
case Array(str: String, n, _*) if str.matches("col|row") => n //note that spaces are removed in the pattern
case _ => 0
}
請注意,它是一個'Array [Any]',你的結果也是'Any'。 –
非常感謝您的回答和評論。 – elm
這絕對比我的解決方案更好 – serejja
這是一個大膽的回覆。 –
@serejja:好吧,可能更有效率,可以說是更具可讀性 - 也許;)。無論如何謝謝。 –