Scala: 使用正则表达式提取字符串的部分

11

我有一个非常简单的字符串,就像这个:

"Some(1234)"
我想从中提取“1234”。该怎么做?
4个回答

10
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+ 仅限于数字。


1
如果不匹配会怎样? - zinking
将会抛出一个 scala.MatchError - Akos Krivachy
我有多个括号对,如何获得正确的匹配? - Albert Hendriks

7
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

3

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

0

另一种方法是使用正则表达式。限制为4位数字。

def getnumber (args: Array[String]) {

  val str = "Some(1234)"
  val nums = "\\d{4}".r
  println (nums.findAllIn(str).mkString)
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接