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
子字符串
$
- 字符串结尾。
我需要分别抓取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
子字符串$
- 字符串结尾。