如何使用正则表达式对数组中的第一个字符串元素进行模式匹配?使用正则表达式的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:好吧,可能更有效率,可以说是更具可读性 - 也许;)。无论如何谢谢。 –