首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala --如何在带有Regex的s3:/前缀之后提取路径?

Scala --如何在带有Regex的s3:/前缀之后提取路径?
EN

Stack Overflow用户
提问于 2019-08-22 09:33:05
回答 4查看 616关注 0票数 1

我想从/bucketName前缀之后提取一个路径。现在,我已经成功地提取了s3:/前缀本身。

代码语言:javascript
复制
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呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-08-22 09:47:21

你可以用

代码语言:javascript
复制
val pattern = "(?<=s3:/).+".r
val str = "s3://bucketName/data"
println(pattern.findFirstIn(str).getOrElse(""))

Scala演示

详细信息

  • (?<=s3:/).+ -匹配紧接s3:/之前的位置,然后匹配除行中断字符以外的任何1+字符。
  • pattern.findFirstIn(str) --在字符串中查找模式的第一次出现。

如果您愿意,也可以为此使用模式匹配--这样,您就不需要查找,只需要一个围绕.+的捕获组。

代码语言:javascript
复制
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演示

一个警告:这需要一个完整的字符串匹配。

票数 1
EN

Stack Overflow用户

发布于 2019-08-22 09:41:36

缺失.*

代码语言:javascript
复制
 val pattern = new Regex("(s3-|s3\\.)?(.*)\\:/.*")
票数 1
EN

Stack Overflow用户

发布于 2019-08-22 09:58:38

您还可以匹配s3:/并捕获组中的换行符(.+)以外的任何字符:

代码语言:javascript
复制
s3:/(.+)

Regex演示 x- Scala演示

代码语言:javascript
复制
val s3Path = "s3://bucketName/dataDir"
val pattern = "s3:/(.+)".r
pattern.findFirstMatchIn(s3Path).foreach(m ⇒ println(m.group(1)))

结果

代码语言:javascript
复制
/bucketName/dataDir
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57606253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档