如何在配置单元中的正则表达式组之间添加空格?

时间:2017-02-20 17:03:45

标签: regex hive

我试图在蜂巢中以特定的方式分隔驼峰案例字符串。任何相邻的大写字母都保留为一个块,除非其中一个大写字母带有其他字母数字字符,在这种情况下,大写字母位于带有以下字母数字字符串的块中。

例如,HELLOWorld应该变为HELLO WorldHelloWorld5应该成为Hello World5HELLOWorldPeople应该成为HELLO World People。有时整个字符串都是小写的。每个字符串后跟STRING,因此它将是HelloWorldSTRING,但最后一部分应该被丢弃。

这是我写的正则表达式,我认为正确地将单词分成组,但我可能是错的:

([A-Z]?[a-z0-9]+)+STRING|([A-Z]*)([A-Z][a-z0-9]+)*STRING

有没有办法在hive中的每个组之间插入空格? regexp_replace似乎不适合这个问题,只要我能够告诉

2 个答案:

答案 0 :(得分:2)

替换除大写字母以外的其他内容之后/之后的每个大写字母,并用空格本身。

hive> select regexp_replace('ThisIsHELLOWorldPeople','(?<=[^A-Z])[A-Z]|[A-Z](?=[^A-Z])',' $0');
OK
 This Is HELLO World People

答案 1 :(得分:0)

这实际上比我想象的要简单。我需要选择单词之间的空格,而不是单词本身。

regexp_replace(regexp_extract(string_col, "(.*)STRING"), 
           "(?<=[A-Za-z])()(?=([A-Z][a-z]))", 
           " ")