2017-02-20 32 views
1

我想在蜂巢中以特定的方式空出骆驼的情况。任何相邻的大写字母都保留为一个块,除非其中一个大写字母导入其他字母数字字符,在这种情况下,大写字母位于具有以下字母数字字符串的块中。例如,HELLOWorld应该变成HELLO WorldHelloWorld5应该变成Hello World5HELLOWorldPeople应该变成HELLO World People。有时整个字符串都是小写字母。每个字符串后面跟着STRING,所以它会是HelloWorldSTRING,但最后一部分应该被丢弃。如何在配置单元中的正则表达式组之间添加空格?

这是我写的,我认为在正确分裂的话成组的作品,但我可能是错的正则表达式:

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

有什么办法插入在蜂房各组之间的空间?据我所知,regexp_replace似乎不适用于此问题

回答

2

用空格和它自己替换大写字母之前/之后的每个大写字母。

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

查看更新的答案 –

0

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

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

同样在这里。需要针对OP示例进行测试。 –

+0

@DuduMarkovitz这是OP的答案;) –

+0

: - )))............. –

相关问题