hive 在配置单元中使用Regexp_replace替换列中的多个字符串

wgx48brx  于 2022-11-05  发布在  Hive
关注(0)|答案(1)|浏览(1329)

我一直在尝试替换Hive中列中可能出现的子字符串列表:此类字符串的示例:“SA”、“DE”、“CV”、“MI”等。
我试着用Hive中的regexp_replace函数替换它们。
select regexp_replace(company_name," DE | SA | CV ", " "), company_name from table limit 20;
我以为它可以处理所有的情况,但后来我有以下相同的输出:
ALCA SA DE CV -〉〉〉〉〉〉〉〉ALCA DE CV
墨西哥层流股份有限公司-〉〉〉〉〉〉〉〉墨西哥层流股份有限公司
我试着在字符的开头和前面插入\s*,但是输出是一样的。有没有办法一次把它们全部替换掉?谢谢

q7solyqu

q7solyqu1#

因为您在regex参数前后都有空格,请使用这个

regexp_replace("MEXICANA DE SA LAMINACION SA CV "," DE| SA| CV", " ") 

select regexp_replace(company_name," DE| SA| CV", " "), company_name from table limit 20;

请注意,我在参数后面用了一个空格。如果你有一个单词是以DE或SA或CV开头的,会引起问题,我们可以分别处理。
为什么你的代码不工作-当你用“ALCA SA DE CV”中的““替换“SA“时--〉这变成了“ALCA DE CV”。但是请注意如果你考虑“SA“,字符DE在字符串前没有空格。这就是为什么DE不会被替换。CV在字符串后没有空格,所以它不会被替换。所以,这意味着你会得到“ALCA DE CV”。

相关问题