我想从/bucketName前缀之后提取一个路径。现在,我已经成功地提取了s3:/前缀本身。
import scala.util.matching.Regex
val s3Path = "s3://bucketName/dataDir"
val pattern = new Regex("(s3-|s3\\.)?(.*)\\:/")
val pathString: String = (pattern findFirstIn s3Path).getOrElse("")
// prints s3:/
println(pathString) 我怎么能得到/bucketName/dataDir呢?
发布于 2019-08-22 09:47:21
你可以用
val pattern = "(?<=s3:/).+".r
val str = "s3://bucketName/data"
println(pattern.findFirstIn(str).getOrElse(""))见Scala演示。
详细信息
(?<=s3:/).+ -匹配紧接s3:/之前的位置,然后匹配除行中断字符以外的任何1+字符。pattern.findFirstIn(str) --在字符串中查找模式的第一次出现。如果您愿意,也可以为此使用模式匹配--这样,您就不需要查找,只需要一个围绕.+的捕获组。
val pattern = "s3:/(.+)".r
val str = "s3://bucketName/data"
val m = str match {
case pattern(url) => url
case _ => ""
}
println(s"URL: ${m}") // => URL: /bucketName/data看一个Scala演示。
一个警告:这需要一个完整的字符串匹配。
发布于 2019-08-22 09:41:36
缺失.*
val pattern = new Regex("(s3-|s3\\.)?(.*)\\:/.*")https://stackoverflow.com/questions/57606253
复制相似问题