HiveSQL 的 REPLACE() 函数,REGEXP_REPLACE() 未按预期工作

问题描述

我运行以下语句将“..”的字符替换为“.”:

CREATE TABLE TableA AS
SELECT Column1,REGEXP_REPLACE(Column2,"..",".") AS NewColumn
FROM TableB;

NewColumn 的结果变成了“.......”,REGEXP_REPLACE() 函数有什么问题?

解决方法

regexp_replace 需要正则表达式模式。 . 表示正则表达式中的任何字符,因此所有字符对都被替换为句号,因为您将 .. 指定为正则表达式模式。

为了防止这种情况,你可以逃避句号:

REGEXP_REPLACE(Column2,"\\.\\.",".")

或使用 replace,它需要一个字符串模式:

REPLACE(Column2,"..",".")
,

除了@mck 建议的之外,您还可以使用量词来重复模式

REGEXP_REPLACE(Column2,"\\.{2}",".")

或者如果您想用一个点替换 2 个或更多点:

REGEXP_REPLACE(Column2,"\\.{2,}",".")