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

相关文章

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re