在 presto 中使用 regexp 仅当最后一个斜杠前面有一个字符时才删除它

Use regexp in presto to remove the last slash only when it's preceded by a character

在 Presto 或 SQL 中是否有一种方法可以仅在最后一个反斜杠前面有一个字符时删除它,否则保留它?

我正在使用 regexp_replace。例如 if x = '/' 表达式应该 return '/' 如果 x = 'beta/alpha/' 它应该 return 'beta/alpha'

我正在使用 select regexp_replace ([expression], '[\/]$', '')

当只有一个反斜杠时,此 return 为空字符串,如果表达式在反斜杠之前有一些字符,则从字符串末尾删除反斜杠。

您可以使用

regexp_replace([expression], '([^/])/$', '')
-- or
regexp_replace([expression], '(?<=[^/])/$', '')

参见regex demo

详情

  • ([^/])/$ - 匹配并捕获除 / 之外的任何字符到第 1 组(使用 ([^/]) 模式,替换模式中的 </code> 是替换反向引用指的是第 1 组值),然后匹配字符串末尾的 <code>/ ($)
  • (?<=[^/])/$ 仅当紧靠左侧的字符不是 / 字符(且不是字符串的开头)时才匹配字符串末尾的 /