Scala Regex 捕获单独的组

Scala Regex capture separate groups

我需要分别抓取3组。 例如:

s3://some/path/TIMESTAMP/part-1234.parquet

|----- g1 ----------|----- g2 ------|-------- g3 ---- -----|

其中 g3 是文件名,g2 是时间戳,g1 是时间戳之前的任何内容

我想出了使用 scala 捕获 2 个组的方法:

val pattern = "(.*?)(part.*.parquet)$".r
val pattern(fileBasePath, filename) = row.file_path

我正在寻找的是这样的东西:

val pattern(fileBasePath, timestamp, filename) = row.file_path

上面的模式会是什么样子?

您可以使用

val pattern = """^(.*?)/([^/]+)/(part.*\.parquet)$""".r

参见regex demo

详情

  • ^ - 字符串开头
  • (.*?) - 第 1 组:除换行字符外的任何零个或多个字符,尽可能少
  • / - 一个 / 字符
  • ([^/]+) - 第 2 组:/
  • 以外的任何一个或多个字符
  • / - 一个 / 字符
  • (part.*\.parquet) - 第 3 组:part,除换行字符外的任何零个或多个字符,尽可能多,然后是 .parquet 子字符串
  • $ - 字符串结尾。