在 presto 中使用正则表达式仅在最后一个斜杠前面有一个字符时才删除它

Posted

技术标签:

【中文标题】在 presto 中使用正则表达式仅在最后一个斜杠前面有一个字符时才删除它【英文标题】:Use regexp in presto to remove the last slash only when it's preceded by a character 【发布时间】:2021-06-02 07:24:45 【问题描述】:

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

我在 presto 中使用了 regexp_replace。例如,如果 x = '/' 表达式应该返回 '/' 如果 x = 'beta/alpha/' 它应该返回 'beta/alpha'

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

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

【问题讨论】:

您如何使用regexp_replace?请使用正则表达式显示您当前的代码行。 【参考方案1】:

你可以使用

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

请参阅regex demo。

详情

([^/])/$ - 匹配并捕获除 / 之外的任何字符到组 1(使用 ([^/]) 模式,替换模式中的 $1 是引用组 1 值的替换反向引用),然后匹配 @987654327 @ 在字符串的末尾 ($) (?&lt;=[^/])/$ 仅当紧靠左侧的字符不是 / 字符(而不是字符串的开头)时才匹配字符串末尾的 /

【讨论】:

太棒了!这正是我想要的。谢谢! 感谢您提供详细信息。现在很清楚了。

以上是关于在 presto 中使用正则表达式仅在最后一个斜杠前面有一个字符时才删除它的主要内容,如果未能解决你的问题,请参考以下文章

替换 URL 中最后一个斜杠后的所有内容

python 正则表达式中反斜杠()的麻烦和陷阱

用于在字符中获取字符串的正则表达式,第一个字符集在 Presto/Athena 中是可选的

python 正则表达式中反斜杠()的麻烦和陷阱 (转)

正则表达式 反斜杠的匹配 2018-11-30

MySQL 正则表达式用于在正文中查找带有双斜杠的内部 URL