Regex 如何在不知道正则表达式是否匹配的情况下使用正则表达式提取子字符串(组)?
我想用这个Regex 如何在不知道正则表达式是否匹配的情况下使用正则表达式提取子字符串(组)?,regex,scala,Regex,Scala,我想用这个 val r = """^myprefix:(.*)""".r val r(suffix) = line println(suffix) 但是当字符串不匹配时,它会给出一个错误。如果匹配是可选的,如何使用类似的构造 编辑:为了清楚起见,我需要组(.*)试试看 r.findFirstIn(line) UPD: scala>val rgx=“^myprefix:(.*)”。r rgx:scala.util.matching.Regex=^myprefix:(.*)的名称 scala>v
val r = """^myprefix:(.*)""".r
val r(suffix) = line
println(suffix)
但是当字符串不匹配时,它会给出一个错误。如果匹配是可选的,如何使用类似的构造
编辑:为了清楚起见,我需要组(.*)
试试看
r.findFirstIn(line)
UPD:
scala>val rgx=“^myprefix:(.*)”。r
rgx:scala.util.matching.Regex=^myprefix:(.*)的名称
scala>val line=“myprefix:value”
行:java.lang.String=myprefix:value
scala>for(rgx(group)您可以通过模式匹配提取匹配组
val r = """^myprefix:(.*)""".r
line match {
case r(group) => group
case _ => ""
}
使用选项的另一种方法是:
Option(line) collect { case r(group) => group }
这样做的好处是,您可以将其作为一个单行程序编写,而无需将正则表达式指定给中间值r
如果您想知道,组0是匹配的字符串,而组1等是捕获组。那么,当正则表达式不匹配时,应该返回什么,一个空字符串?我不在乎,只要程序不退出……还有一个if“contains”或者类似的就可以了,它必须简短优雅。但是它返回整个匹配,我想要组(在我的例子中是后缀),如果(!r.findFirstIn(line.isEmpty){val r(suffix)=line println(suffix)},我可以这样使用它但这看起来很奇怪…我刚刚尝试了这个,val名称不需要大写(至少在windows上的scala 2.9.2上是这样)哦,对了,只有没有匹配组才有必要。这里的基本sytax是什么?为什么
Option(line) collect { case r(group) => group }
"""^myprefix:(.*)""".r // Regex
.findFirstMatchIn(line) // Option[Match]
.map(_ group 1) // Option[String]