我有一个非常简单的字符串,就像这个:
"Some(1234)"
我想从中提取“1234”。该怎么做?val s = "Some(1234)"
//s: java.lang.String = Some(1234)
val Pattern = """Some\((\d+)\)""".r
//Pattern: scala.util.matching.Regex = Some\((\d+)\)
val Pattern(number) = s
//number: String = 1234
将您的正则表达式替换为所需内容。 \d+
仅限于数字。
scala> val s = "Some(1234)"
s: String = Some(1234)
scala> val nums = "[0-9]".r
nums: scala.util.matching.Regex = [0-9]
scala> nums.findAllIn(s).mkString
res0: String = 1234
从 Scala 2.13
开始,可以通过解构字符串插值器来匹配 String
:
最初的回答
val s"Some($number)" = "Some(1234)"
// number: String = 1234
请注意,如果想从toString
版本中提取Option[Int]
,可以使用插值提取和match语句
:
最初的回答。
x match { case s"Some($number)" => number.toIntOption case _ => None }
// x = "Some(1234)" => Option[Int] = Some(1234)
// x = "Some(1S3R)" => Option[Int] = None
// x = "None" => Option[Int] = None
另一种方法是使用正则表达式。限制为4位数字。
def getnumber (args: Array[String]) {
val str = "Some(1234)"
val nums = "\\d{4}".r
println (nums.findAllIn(str).mkString)
}
scala.MatchError
。 - Akos Krivachy