【问题标题】:How to Replace special characters in hive columns?如何替换 hive 列中的特殊字符?
【发布时间】: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

我无法替换文件名中的点。 如何替换数据中除文件扩展名之外的所有点?

【问题讨论】:

    标签: hive regexp-replace


    【解决方案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+$))
    猜你喜欢
    • 2017-05-26
    • 2021-09-20
    • 2011-05-16
    • 2010-10-06
    • 2013-01-14
    • 1970-01-01
    • 2014-11-03
    • 2017-06-24
    • 2017-07-05
    相关资源
    最近更新 更多