如何替换 hive 列中的特殊字符?
Posted
技术标签:
【中文标题】如何替换 hive 列中的特殊字符?【英文标题】:How to Replace special characters in hive columns? 【发布时间】:2020-07-15 14:27:16 【问题描述】:我在 hive 中有一个要求,需要用 _ 替换非字母数字字符。 列中的数据是“Pranav_Wagde_job_1163_W.Pranav Ltr-Resume 04.07.2016.pdf”
SELECT FILENAME, REGEXP_REPLACE(FILENAME,"[^0-9a-zA-Z._]", "_"), FROM HIVEDB.FILEDATA WHERE FILENAME='Pranav Wagde_job_1163_W.Pranav Ltr-Resume 04.07.2016.pdf';
输出是
Pranav_Wagde_job_1163_W.Pranav Ltr-Resume 04.07.2016.pdf
我无法替换文件名中的点。 如何替换数据中除文件扩展名之外的所有点?
【问题讨论】:
【参考方案1】:如果支持正向前瞻,您可以添加替换 |
匹配所有点,除了右边有 1 个以上单词字符后跟字符串末尾的点。
(?:[^0-9a-zA-Z._]|\.(?!\w+$))
Regex demo
【讨论】:
获取输出为 ___________________________________________________________。 @Pranav 尝试双重转义点\\.
或 (?:[^0-9a-zA-Z._]|[.](?!\w+$))
regex101.com/r/Sd68ae/1
谢谢第四只鸟。您的 RegExp 正在使用您在超链接中提供的工具,但不幸的是它在 hive 中不起作用。我得到一个输出为```Pranav_Wagde_job_1163_W_Pranav_Ltr_Resume_04_07_2016_pdf ```
尝试将另一个反斜杠加倍,例如\\w+
@Pranav 整个模式是(?:[^0-9a-zA-Z._]|\\.(?!\\w+$))
以上是关于如何替换 hive 列中的特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章