我想用这个
val r = """^myprefix:(.*)""".r
val r(suffix) = line
println(suffix)
但是当字符串不匹配时会出错。如何在匹配是可选的情况下使用类似的构造?
编辑:为了清楚起见,我需要该组(.*)
您可以通过模式匹配提取匹配组。
val r = """^myprefix:(.*)""".r
line match {
case r(group) => group
case _ => ""
}
另一种使用方式Option
:
Option(line) collect { case r(group) => group }
"""^myprefix:(.*)""".r // Regex
.findFirstMatchIn(line) // Option[Match]
.map(_ group 1) // Option[String]
这样做的好处是您可以将其编写为单行,而无需将正则表达式分配给中间值r
。
如果您想知道,组 0 是匹配的字符串,而组 1 等是捕获组。
尝试
r.findFirstIn(line)
升级版:
scala> val rgx = """^myprefix:(.*)""".r
rgx: scala.util.matching.Regex = ^myprefix:(.*)
scala> val line = "myprefix:value"
line: java.lang.String = myprefix:value
scala> for (rgx(group) <- rgx.findFirstIn(line)) yield group
res0: Option[String] = Some(value)