Hive 查询仅替换第一次出现的子字符串

Posted

技术标签:

【中文标题】Hive 查询仅替换第一次出现的子字符串【英文标题】:Hive query to replace only the first occurrence of a substring 【发布时间】:2019-12-12 15:03:14 【问题描述】:

我需要替换给定字符串中第一次出现的子字符串。 例如,如果字符串是"My name is Adam",我想用"@" 替换第一个"a"。 所以我想要的输出是"My n@me is Adam"。 在 mysql 中,有一个函数 regexp_replace,它有一个可选参数 occurrence 来指定要替换的出现次数。但不幸的是,hive 函数中不存在该可选参数。有什么建议吗?

【问题讨论】:

【参考方案1】:
hive> select regexp_replace('My name is Adam','^(.*?)a','$1@');
OK
My n@me is Adam
Time taken: 0.061 seconds, Fetched: 1 row(s)

模式'^(.*?)a'表示:

  ^ - the beginning of the string
.*? - any character (.) zero or more times (*) not greedy (?)
 () - remember group, we will refer it in the replacement string as $1
  a - 'a' character literally

替换字符串'$1@' 表示:

$1 - group number one in the pattern (everything before 'a')
 @ - '@' character literally

你可以在这里调试正则表达式:regex101.com

【讨论】:

以上是关于Hive 查询仅替换第一次出现的子字符串的主要内容,如果未能解决你的问题,请参考以下文章

Ruby - 用另一个字符串替换第一次出现的子字符串

sql server 里类似replace的字符串子串删除

Java如何计数替换字符串中第一次出现的子字符串?

2022华为机试真题 C++ 实现 字符串子序列II

PB中取字符串子串的函数是啥

华为OD机试真题Java实现判断字符串子序列真题+解题思路+代码(2022&2023)