在 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 @ 在字符串的末尾 ($
)
(?<=[^/])/$
仅当紧靠左侧的字符不是 /
字符(而不是字符串的开头)时才匹配字符串末尾的 /
。
【讨论】:
太棒了!这正是我想要的。谢谢! 感谢您提供详细信息。现在很清楚了。以上是关于在 presto 中使用正则表达式仅在最后一个斜杠前面有一个字符时才删除它的主要内容,如果未能解决你的问题,请参考以下文章