Hive中正则表达式替换函数 regexp_replace和正则表达式解析函数 regexp_extract的用法总结

本文主要是介绍Hive中正则表达式替换函数 regexp_replace和正则表达式解析函数 regexp_extract的用法总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hive中 正则表达式替换函数 regexp_replace和正则表达式解析函数 regexp_extract的用法总结

Hive中有很多字符串相关的函数,其中有两个与正则表达式相关的比较特殊,近期使用的时候做了较多的测试,做个笔记,鼓励一下自己,每天进步一点点。

正则表达式替换函数 regexp_replace

正则替换是常用的字符串替换函数

  1. 语法:regexp_replace(string subject, string pattern, string str)
  2. 参数说明:subject为被替换的字符串,pattern为正则表达式,str为替换正则表达式(匹配到的字符串)的字符串
  3. 描述:将字符串subject中,符合正则表达式pattern的字符串,替换为字符串str,然后将替换后的整个字符串返回
  4. 测试:
#执行语句1
hive> select regexp_replace('abcdefg','abc','ABA') as res;
#执行结果1
res
ABAdefg
Time taken: 0.041 seconds, Fetched: 1 row(s)#执行语句2
hive> select regexp_replace('abcdefg','[^aceg]','x') as res;
#执行结果2
res
axcxexg
Time taken: 0.028 seconds, Fetched: 1 row(s)

正则表达式解析函数 regexp_extract

先了解正则中捕获分组的概念,其实就是一个括号内的内容,如 “(\d)\d” 而"(\d)" 这就是一个捕获分组

  1. 语法:regexp_extract(string subject, string pattern, int index)
  2. 参数说明:subject为被解析的字符串,pattern为正则表达式,index为正则表达式中捕获分组的序号,取值范围是0~n(n为捕获分组个数)。
    其中,index取值为 0:返回pattern匹配到的整个结果;
    index取值为1:返回pattern中第1个捕获分组匹配到的结果;

    index取值为n:返回pattern中第n个捕获分组匹配到的结果;
    index取值小于0或者大于n:报错。
  3. 描述:将字符串subject,按照pattern正则表达式的规则拆分,返回index指定的字符。
  4. 测试:
#执行语句1
hive> select regexp_extract('abcdefg','a(b)(.*?)(e)',0) as res;
#执行结果1
res
abcde
Time taken: 0.035 seconds, Fetched: 1 row(s)#执行语句2
hive> select regexp_extract('abcdefg','a(b)(.*?)(e)',1) as res;
#执行结果2
res
b
Time taken: 0.032 seconds, Fetched: 1 row(s)#执行语句3
hive> select regexp_extract('abcdefg','a(b)(.*?)(e)',2) as res;
#执行结果3
res
cd
Time taken: 0.028 seconds, Fetched: 1 row(s)#执行语句4
hive> select regexp_extract('abcdefg','a(b)(.*?)(e)',3) as res;
#执行结果4
res
e
Time taken: 0.028 seconds, Fetched: 1 row(s)#执行语句5
hive> select regexp_extract('abcdefg','a(b)(.*?)(e)',4) as res;
#执行结果5
FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments '4': org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public java.lang.String org.apache.hadoop.hive.ql.udf.UDFRegExpExtract.evaluate(java.lang.String,java.lang.String,java.lang.Integer)  on object org.apache.hadoop.hive.ql.udf.UDFRegExpExtract@571d0925 of class org.apache.hadoop.hive.ql.udf.UDFRegExpExtract with arguments {abcdefg:java.lang.String, a(b)(.*?)(e):java.lang.String, 4:java.lang.Integer} of size 3#执行语句6
hive> select regexp_extract('abcdefg','a(b)(.*?)(e)',-1) as res;
#执行结果6
FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments '1': org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public java.lang.String org.apache.hadoop.hive.ql.udf.UDFRegExpExtract.evaluate(java.lang.String,java.lang.String,java.lang.Integer)  on object org.apache.hadoop.hive.ql.udf.UDFRegExpExtract@14201a90 of class org.apache.hadoop.hive.ql.udf.UDFRegExpExtract with arguments {abcdefg:java.lang.String, a(b)(.*?)(e):java.lang.String, -1:java.lang.Integer} of size 3

5.补充说明:如果 subject为空,或者pattern为空,或者pattern匹配不到字符串,则返回值为空

#1
hive> select regexp_extract('','ab',1) as res;
OK
resTime taken: 0.044 seconds, Fetched: 1 row(s)#2
hive> select regexp_extract('abcdefg','',0) as res;
OK
resTime taken: 0.031 seconds, Fetched: 1 row(s)#3
hive> select regexp_extract('abcdefg','a(bb)(.*?)(e)',0) as res;
OK
resTime taken: 0.029 seconds, Fetched: 1 row(s)

这篇关于Hive中正则表达式替换函数 regexp_replace和正则表达式解析函数 regexp_extract的用法总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/892921

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数