Regex 配置单元:使用正则表达式拆分字符串

Regex 配置单元:使用正则表达式拆分字符串,regex,hadoop,hive,Regex,Hadoop,Hive,我有一个由:分隔的字符串。如何使用HiveUDFregexp\u extract()从字符串中提取单词 regexp_extract('2foa1fa::12hjk','^(\\w.*)\\:{2}(\\w.*)$',1) as word1 输出:2foa1fa regexp_extract('2foa1fa::12hjk','^(\\w.*)\\:{2}(\\w.*)$',2) as word2 输出:12hjk ^锚定到字符串的开头 \\w查找单词字符,.*表示任意次数 \\:{2}在

我有一个由
分隔的字符串。如何使用
Hive
UDF
regexp\u extract()
从字符串中提取单词

regexp_extract('2foa1fa::12hjk','^(\\w.*)\\:{2}(\\w.*)$',1) as word1
输出:
2foa1fa

regexp_extract('2foa1fa::12hjk','^(\\w.*)\\:{2}(\\w.*)$',2) as word2
输出:
12hjk

  • ^锚定到字符串的开头
  • \\w查找单词字符,.*表示任意次数
  • \\:{2}在一行中查找两个:(这是您的::分隔符)
  • $将字符串锚定到字符串的末尾
  • 在regexp\u extract中指定第三个参数将提取索引(模式)
现在只需将列名粘贴在字符串文字的位置,就可以了

还可以使用拆分函数创建数组,然后按数组位置进行查询。看起来是这样的:

select my_array[2] from 
    (select split('2foa1fa::12hjk','\\::') as my_array from my_table) b;
输出:
12hjk

输出:
2foa1fa

regexp_extract('2foa1fa::12hjk','^(\\w.*)\\:{2}(\\w.*)$',2) as word2
输出:
12hjk

  • ^锚定到字符串的开头
  • \\w查找单词字符,.*表示任意次数
  • \\:{2}在一行中查找两个:(这是您的::分隔符)
  • $将字符串锚定到字符串的末尾
  • 在regexp\u extract中指定第三个参数将提取索引(模式)
现在只需将列名粘贴在字符串文字的位置,就可以了

还可以使用拆分函数创建数组,然后按数组位置进行查询。看起来是这样的:

select my_array[2] from 
    (select split('2foa1fa::12hjk','\\::') as my_array from my_table) b;

输出:
12hjk

invoketheshells答案有什么问题吗?invoketheshells答案有什么问题吗?