正则表达式 - Hive / Impala - 在2个字符

时间:2018-01-09 11:30:28

标签: regex hive impala

我想使用regexp_extract函数在Hive / Impala中捕获和提取两个字符(/-)之间的所有字词以及来自文本的开头直到字符-

我有一个这样的字符串:
key1-value1/key2-value2/key3-value3/keyN-valueN
我希望函数提取:
key1
key2
key3
keyN

键值对的出现次数可变 例如: abc-bca/abc.s-13:13:13/any-x/keyn-1 我希望功能能够提取我:
abc
abc.s
any
keyn

我正在使用以下正则表达式,但它仅在我有3个键时才有效:
^(.+)-(?:.+)/(.+)-(?:.+)/(.+)-(?:.$)
如何将其扩展为n(变量)键?

由于

2 个答案:

答案 0 :(得分:0)

如果它支持lookbehind

(?<=^|\/)[^\-]*

或者它是否支持perl表示法\K

(?:^|\/)\K[^\-]*

regex101

  • ^|\/:匹配行首或/
  • [^\-]:匹配除-
  • 以外的任何字符

答案 1 :(得分:0)

select explode( split(regexp_replace('key1-value1/key2-value2/key3-value3/keyN-valueN','(?<=^|/)(.*?\\-)',''),'/')) as col1
  • regexp_replace,从行首或从斜杠到连字符(-)替换所有字符。
  • split函数根据'/'转换字符串的左侧。
  • explode函数将数组元素转换为行。