首页 > 解决方案 > Scala Regex 捕获单独的组

问题描述

我需要分别捕获 3 个组。例如:

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

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

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

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

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

我正在寻找的是这样的:

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

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

标签: regexscalaregex-group

解决方案


您可以使用

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

请参阅正则表达式演示

细节

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

推荐阅读