我想用这个
val r = """^myprefix:(.*)""".r
val r(suffix) = line
println(suffix)
但是当字符串不匹配时它会出错。如何使用匹配是可选的类似构造?
编辑:为了说清楚,我需要小组(.*)
答案 0 :(得分:37)
您可以通过模式匹配提取匹配组。
val r = """^myprefix:(.*)""".r
line match {
case r(group) => group
case _ => ""
}
使用Option
的另一种方式:
Option(line) collect { case r(group) => group }
答案 1 :(得分:27)
"""^myprefix:(.*)""".r // Regex
.findFirstMatchIn(line) // Option[Match]
.map(_ group 1) // Option[String]
这样做的好处是,您可以将其编写为单行,而无需将正则表达式分配给中间值r
。
如果您想知道,第0组是匹配的字符串,而第1组等是捕获组。
答案 2 :(得分:2)
试
r.findFirstIn(line)
UPD:
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)