如何在不知道正则表达式是否匹配的情况下使用正则表达式提取子字符串(组)?

Ixx*_*Ixx 19 regex scala

我想用这个

val r = """^myprefix:(.*)""".r
val r(suffix) = line
println(suffix)
Run Code Online (Sandbox Code Playgroud)

但是当字符串不匹配时会出错.如何使用匹配是可选的类似构造?

编辑:为了说清楚,我需要小组 (.*)

Kim*_*bel 38

您可以通过模式匹配提取匹配组.

val r = """^myprefix:(.*)""".r
line match {
  case r(group) => group
  case _ => ""
}
Run Code Online (Sandbox Code Playgroud)

另一种使用方式Option:

Option(line) collect { case r(group) => group }
Run Code Online (Sandbox Code Playgroud)


Lui*_*hys 27

"""^myprefix:(.*)""".r        // Regex
  .findFirstMatchIn(line)     // Option[Match]
  .map(_ group 1)             // Option[String]
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,您可以将其写为单行,而无需将正则表达式分配给中间值r.

如果您想知道,组0是匹配的字符串,而组1等是捕获组.