hive 中正则表表达式使用
一 概念
概念:正则表达式(Regular Expression),又称规则表达式,是记录文本规则的代码。通常被用来检索、替换那些符合某个模式(规则)的文本。
特性:最初是由Unix中的工具软件(例如sed和grep)普及开的,现在许多程序设计语言都支持利用正则表达式。
常见缩写:正则表达式在代码中,通常缩写成regex、regexp、RE,复数有regexps、regexes、regexen等。
二、语法
1、正则表达式保留字符
代码 | 说明 |
---|---|
[ ] \ ^ $ . | ? * + ( ) { } | 正则保留字,如果想匹配为文本字符时,需要使用“\”进行转义 |
| 代表或,也成为分支条件,例:x|y 匹配x或者y
[ ] 用于定义字符集,例:[aeiou] 匹配英文元音字母
( ) 用于形成组,后续会讲到
{ } 用于定义重复操作,后续会讲到
示例:\. 匹配字符“.”
\\ 匹配字符“\”
2、非打印字符
除了匹配字符串之外,正则表达式还可以匹配非打印字符:
代码 | 说明 | |
---|---|---|
\cx | 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符 | |
\f | 匹配一个换页符。等价于 \x0c(十六进制) 和 \cL(控制字符) | |
\n | 匹配一个换行符。等价于 \x0a 和 \cJ | |
\r | 匹配一个回车符。等价于 \x0d 和 \cM | |
\t | 匹配一个制表符。等价于 \x09 和 \cI | |
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK | |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v] | |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v] |
3、字符集
代码 | 说明 | 备注 | |
---|---|---|---|
\d | 匹配数字。等价于[0-9] | ||
\D | 匹配任意非数字的字符。等价于[^0-9] | ||
\w | 匹配字母或数字或下划线。等价于[A-Za-z0-9_] | ||
\W | 匹配任意不是字母,数字,下划线的字符。等价于[^A-Za-z0-9_] | ||
\s | 匹配任意的空白符。等价于[\f\n\r\t\v] | 既属于字符集,又属于非打印字符 | |
\S | 匹配任意不是空白符的字符。等价于[^\f\n\r\t\v] | ||
. | 匹配除换行符以外的任意字符。等价于[^\n\r] |
4、边界符
代码 | 说明 | |
---|---|---|
^ | 匹配字符串的开始 | |
$ | 匹配字符串的结束 | |
\b | 匹配单词的开始或结束 | |
\B | 匹配不是单词开头或结束的位置 |
5、量词、重复
代码/语法 | 说明 | |
---|---|---|
* | 重复零次或更多次 | |
+ | 重复一次或更多次 | |
? | 重复零次或一次 | |
{n} | 重复n次 | |
{n,} | 重复n次或更多次 | |
{n,m} | 重复n到m次 |
\ba\w*\b 匹配以字母a开头的单词
Windows\d+ 匹配Windows后面跟1个或更多数
\b\w{6}\b 匹配刚好6个字符的单词
注意:量词本身是贪婪匹配,即返回最长的匹配;量词后加 ? 可以实现非贪婪或最小匹配
例如,对字符串“Windows98” 使用下面不同的正则表达式,结果不同:
表达式:Windows\d+ 匹配结果为: Windows98 说明:\d+ 按最长的数字匹配
表达式:Windows\d+? 匹配结果为: Windows9 说明:\d+? 按最短的数据匹配
举个实际的数据清洗例子,对字符串“orderid:12344,create_time:2020-10-10 00:00:00, ” 中的进行匹配:
表达式:orderid:(.*), 匹配结果为: 12344,create_time:2020-10-10 00:00:00 说明:匹配orderid: 和 , 中间的最长内容
表达式:orderid:(.*)?, 匹配结果为: 12344 说明:匹配orderid: 和 , 中间的最短内容
6、分组
把正则表达式的一部分放在圆括号内,可以将它们形成组。
我们可以对整个组使用一些正则操作,例如重复操作符:(a\d+)+ 匹配 a11a2,例如分支条件:(ab)|(yz) 匹配ab或者yz,等等。
注意:当对组使用重复操作符时,缓存里后向引用内容会被不断刷新,只保留最后匹配的内容,需要注意括号的位置。
例如:([abc]+)=\1 将匹配“cab=cab”,但是([abc])+=\1 却不会。
因为([abc])第一次匹配“c”时,“\1”代表“c”;然后([abc])会继续匹配“a”和“b”。最后“\1”代表“b”,所以它会匹配“cab=b”。
6.1 捕获
分类 | 代码 | 说明 |
---|---|---|
捕获 | (exp) | 匹配exp,并捕获文本到自动命名的组里 |
(?<name>exp) | 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) | |
(?:exp) | 匹配exp,不捕获匹配的文本,也不给此分组分配组号 | |
注释 | (?#comment) | 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 |
-
(?<!4)56(?=9)
查找56,要求前面不能是4,后面必须是9。因此,可以匹配如下文本 5569 ,与4569不匹配。
-
提取字符串 da12bka3434bdca4343bdca234bm中包含在字符a和b之间的数字,但是这个a之前的字符不能是c;b后面的字符必须是d才能提取。
先写出含有捕获组的正则表达式:[^c]a\d*bd,
再将其变为非捕获组的正则表达式:(?<=[^c]a)\d*(?=bd)
7、运算符优先级
在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先权顺序来求值。
下图从上到下优先级降低,从左往右优先级降低:
操作符 | 说明 | |
---|---|---|
\ | 转义符 | |
(), (?:), (?=), [] | 圆括号和方括号 | |
*, +, ?, {n}, {n,}, {n,m} | 限定符 | |
^, $, \元字符, 一般字符 | 位置和顺序 | |
| | 或操作 |
示例:ab?(c|de*)+|fg 的含义:
-
由于括号的存在,所以,(c|de*)是一个整体结构。
-
在(c|de*)中,注意其中的量词*,因此e*是一个整体结构。
-
又因为分支结构“|”优先级最低,因此c是一个整体、而de*是另一个整体。
-
整个正则分成了 a、b?、(...)+、f、g。而由于分支,又可以分成ab?(c|de*)+和fg。
备注:
-- 注意,hive中转义 转义字符,即需要两个\\;presto中则需要一个转义即可。
select regexp_replace('cab:cab2020','^([abc]+):\\1(\\d+)$','$0,name:$1,year$2')
相关文章:
hive 中正则表表达式使用
一 概念 概念:正则表达式(Regular Expression),又称规则表达式,是记录文本规则的代码。通常被用来检索、替换那些符合某个模式(规则)的文本。 特性:最初是由Unix中的工具软件(例如sed和grep&a…...
mssql ,数据库还原BAK命令行方式
如果数据库存在,离线断开 ALTER DATABASE [数据库名] SET OFFLINE WITH ROLLBACK IMMEDIATE --断开其他用户与数据库的连接正式开始还原数据库: USE MASTER --这里注意要使用MASTER,以免出现待还原库被占用的情况 RESTORE DATABASE [数据库名…...

uniapp微信小程序《隐私保护协议》弹窗处理流程
背景 《关于小程序隐私保护指引设置的公告》 《小程序隐私协议开发指南》 流程 1.第一步 必须设置且审核通过!!! 2.第二步 uniapp在manifest.json中添加!!! /* 在 2023年9月15号之前,在 ap…...
RK3568 CAN驱动更新说明
RK3568 CAN问题:同时收发数据一段时间(几秒钟)can出现错误收发功能异常,必须重新down、up恢复正常 内核更新rockchip_canfd.c、iopoll.h,配置Networking support --->CAN bus subsystem support --->CAN Devic…...
day47:C++ day7,异常处理、using的第三种用法、类型转换、lambda表达式、STL标准模板库
my_vectoers.h: #ifndef MY_VECTORS_H #define MY_VECTORS_H #include <iostream>using namespace std;template<typename TYPE> class my_vectors { private:TYPE* ptr;int num;int cnum;TYPE* start_ptrNULL;TYPE* end_ptrNULL; public://无参构造my_vectors(){…...

function—— Verilog的函数
文章目录 前言function写法语法举例说明调用 前言 function用法说明。 提示:以下是本篇文章正文内容,下面案例可供参考 function写法 function的标准写法如下: function <返回值的类型或范围>(函数名);<端口说明语句> // in…...

runtime过程中,常见jar问题解决
io.netty java.lang.NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator.<init>此类问题报错,主要是io.netty 多个jar 冲突导致。、 使用以下命令查看同一个jar 有哪些版本 mvn dependency:resolve -Dclassifiersources对一些不愿意引入的依赖加上…...
ElementPlus· banner轮播图实现
功能,①通用型,三方组件完成(如,elementPlus) ②自己写 轮播图 本文使用vue3中的UI框架——elementPlus——三方组件中的 <el-carousel> 实现轮播图 // 组件静态模板 <template><div class"hom…...

Linux自动化构建项目工具——Makefile/makefile
目录 一,背景知识 二,makefile/Makefile的编写 1.创建makefile/Makefile文件 2.在Makefile文件里写编译代码 3.伪目标——.PHONY 1.伪目标的特点 2.怎样实现总是被执行 4.Makefile/makefile文件的不同编写风格 1.背景知识 2.改写 一,背…...

第11章 字符串和字符串函数
本章介绍以下内容: 函数:gets()、gets_s()、fgets()、puts()、fputs()、strcat()、strncat()、strcmp()、strncmp()、strcpy()、strncpy()、sprintf()、strchr() 创建并使用字符串 使用C库中的字符和字符串函数,并创建自定义的字符串函数 使用…...
TypeScript项目配置
前言 我们需要建立tsconfig.json 作用 用于标识 TypeScript 项目的根路径; 用于配置 TypeScript 编译器; 用于指定编译的文件。 重要字段 files - 设置要编译的文件的名称; include - 设置需要进行编译的文件,支持…...

【Spring面试】二、BeanFactory与IoC容器的加载
文章目录 Q1、BeanFactory的作用是什么?Q2、BeanDefinition的作用是什么?Q3、BeanFactory和ApplicationContext有什么区别?Q4、BeanFactory和FactoryBean有什么区别?Q5、说下Spring IoC容器的加载过程(※)Q…...

Android嵌套事务
这时候旋转设备还是会重置秒表。旋转设备时Android会重新创建活动。如果你的活动包含一个 < fragment >元素,每次重新创建活动时,它会重新插入片段的一个新版本。老片段被丢掉,所有实例变量会设置其初始值。在这个特定的例子中…...
如何让项目准时上线?
项目为什么容易延期? 1、软件研发是一项创造性工作 项目延期是一种普遍现象,管理者最为头疼的一个问题。但是外人并不理解。明明是你们自己做的计划,怎么总会出现这么多问题。说到底,这是由于我们的工作特性决定的。我们做的是一…...

ChatGPT 和 Elasticsearch:APM 工具、性能和成本分析
作者:LUCA WINTERGERST 在本博客中,我们将测试一个使用 OpenAI 的 Python 应用程序并分析其性能以及运行该应用程序的成本。 使用从应用程序收集的数据,我们还将展示如何将 LLMs 成到你的应用程序中。 在之前的博客文章中,我们构建…...

不使用辅助变量的前提下实现两个变量的交换
package operator; //不用第三个辅助变量,实现两个数的交换 public class Demo08 {public static void change(int a, int b){a ab;b a-b;a a-b;System.out.println(a);System.out.println(b);}public static void main(String[] args) {change(900,3000);} }后续…...

SV-DJS-i13电梯对讲网关
SV-DJS-i13电梯对讲网关 DJS-I13 是一款主要应用于电梯场景的对讲设备,可以将电梯原有模拟通话器的模拟信号转换成数字信号,不仅有稳定性好、电信级音质的优点,且完美兼容当下所有基于SIP的主流IPPBX/软交换/IMS平台,如Asterisk, Broadsoft,…...

论文解析-基因序列编码算法DeepSEA
论文解析-DeepSEA 参考亮点功能 方法数据集来源数据 实验评估评估DeepSEA预测染色质特征的性能评估DeepSEA在变异序列上的DHS预测性能数据集结果 参考 Zhou, J., Troyanskaya, O. Predicting effects of noncoding variants with deep learning–based sequence model. Nat Me…...
计组与操作系统
非科班出身的程序员,还是得补一下相关理论课程,最近看了下九曲阑干关于CSAPP的视频,学习了一下计算机组成原理,这里列一下相关知识点。 计算机组成原理: 数的表示与运算:CSAPP第二章 指令系统࿰…...

Pytorch中张量矩阵乘法函数(mm, bmm, matmul)使用说明,含高维张量实例及运行结果
Pytorch中张量矩阵乘法函数使用说明 1 torch.mm() 函数1.1 torch.mm() 函数定义及参数1.2 torch.bmm() 官方示例 2 torch.bmm() 函数2.1 torch.bmm() 函数定义及参数2.2 torch.bmm() 官方示例 3 torch.matmul() 函数3.1 torch.matmul() 函数定义及参数3.2 torch.matmul() 规则约…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...