Scala 之 正则

regex

函数提取
import scala.util.matching.Regex// 输入表达式
val expression = "[a#0, round(a#0, 0) AS round(a, 0)#1, abs(a#0) AS abs(a)#2, len(cast(a#0 as string)) AS len(a)#3]"// 定义一个正则表达式来提取函数名称
val functionPattern: Regex = """(\w+)\((.*?)\)""".r// 提取所有函数的名称并去重
val functions = functionPattern.findAllIn(expression).matchData.map(m => m.group(1))  // 只提取函数名.toList  // 转换为List.distinct  // 去重// 打印结果
println(functions)
object ExtractFunctionNames {def main(args: Array[String]): Unit = {val input = "[round(a#0, 2) AS round(a, 2)#1, a#0]"// 使用正则表达式匹配所有类似于函数名的部分val regex = """([a-zA-Z_][a-zA-Z0-9_]*)\(""".r// 提取所有函数名并去重val functionNames = regex.findAllIn(input).matchData.map(_.group(1)) // 获取匹配的函数名.toSet  // 使用 Set 去重// 输出去重后的函数名println(functionNames)}
}
提取 Aggregate 函数
import scala.util.matching.Regexval expr = "HashAggregate(keys=[ss_store_sk#9], functions=[sum(UnscaledValue(ss_sales_price#15)), sum(UnscaledValue(ss_net_profit#24))])"// 定义正则表达式来匹配functions=后的函数列表
val pattern: Regex = """functions=\[(.*?)\]""".r// 从字符串中查找匹配到的函数列表
val functionList = pattern.findAllMatchIn(expr).flatMap { m =>// 通过逗号分隔函数名,然后提取每个函数名val functions = m.group(1).split(",").map(_.trim) // 按逗号分隔并去除多余空格functions.map { f =>// 提取函数名(去掉函数名后的括号)f.split("\\(")(0)}
}.toList.distinctprintln(functionList)
提取 Window 函数
import scala.util.matching.Regex// 输入字符串
val input = "[ss_store_sk#9, ss_customer_sk#5], [ss_sold_date_sk#2 DESC NULLS LAST], row_number(), 1, Final"// 使用正则表达式:匹配函数名(以括号 `()` 结尾的部分)
val pattern: Regex = """(\w+)(?=\()""".r// 使用正则表达式提取函数名
val functionNames = pattern.findAllIn(input).toSet// 输出结果
println(functionNames)  // List(row_number)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CI/CD-Jenkins安装与应用

CI/CD-Jenkins安装与应用 Docker安装Jenkins docker-compose.yaml version: "3.8" # # 自定义网络配置 # networks:cicd:driver: bridgeservices:jenkins:# 尽量使用新版本的Jenkins, 低版本的Jenkins的有些插件使用不了# jenkins/jenkins:lts-jdk17是长期支持版…

验证Linux多进程时间片切换的程序

​​ 一、软件需求 在同时运行多个CPU密集型进程时,需采集以下统计信息: 当前运行在逻辑CPU上的进程ID每个进程的运行进度百分比 实验程序设计要求: 1. 命令行参数 参数说明示例值n并发进程数量3total总运行时长(毫秒&…

IvorySQL:兼容Oracle数据库的开源PostgreSQL

今天给大家介绍一款基于 PostgreSQL 开发、兼容 Oracle 数据库的国产开源关系型数据库管理系统:IvorySQL。 IvorySQL 由商瀚高软件提供支持,主要的功能特性包括: 完全兼容 PostgreSQL:IvorySQL 基于 PostgreSQL 内核开发&#xf…

树莓派超全系列文档--(13)如何使用raspi-config工具其二

如何使用raspi-config工具其二 raspi-configPerformance optionsOverclockGPU memoryOverlay file systemFan Localisation optionsLocaleTime zoneKeyboardWLAN country Advanced optionsExpand filesystemNetwork interface namesNetwork proxy settingsBoot orderBootloader…

QT音乐播放器(1):数据库保存歌曲

实现功能:用数据库保存本地导入和在线搜索的歌曲记录 目录 一. 保存本地添加的歌曲 1. 使用QSettings (1)在构造函数中,创建对象。 (2)在导入音乐槽函数中,保存新添加的文件路径&#xff0c…

自动化发布工具CI/CD实践Jenkins常用工具和插件的使用

1、安装常用工具 名称版本备注jdkjava8代码打包所需git1.8.3.1maven3.6.3注意配置私服内容nvm0.39.3多Node.js环境管理工具Node.jsv14.18.0 / v16.17.1包管理工具yarn1.22.15包管理工具 1.1 安装jdk Jenkins 需要使用java11 及以上,但是代码打包依赖jdk8&#xff…

shared_ptr和 weak_ptr的详细介绍

关于 shared_ptr 和 weak_ptr 的详细介绍及使用示例: 1. shared_ptr(共享所有权智能指针) 核心特性 引用计数:记录当前有多少个 shared_ptr 共享同一个对象。自动释放:当引用计数归零时,自动释放对象内存…

Spring AI MCP 架构详解

Spring AI MCP 架构详解 1.什么是MCP? MCP 是一种开放协议,它对应用程序向大语言模型(LLMs)提供上下文信息的方式进行了标准化。可以把 MCP 想象成人工智能应用程序的 USB-C 接口。就像 USB-C 为将设备连接到各种外围设备和配件提供了一种…

腾讯系AI应用,可以生视频,3D模型...

以下注册手机后就可以使用了。 腾讯智影 智能抹除-在线去水印去字幕-抹除水印字幕-腾讯智影 混元(文字,图片生成3D) 腾讯混元3D 混元视频(文字生成视频,可惜右下角有文字) https://video.hunyuan.tencen…

数据结构(并查集,图)

并查集 练习版 class UnionFindSet { public:void swap(int* a, int* b){int tmp *a;*a *b;*b tmp;}UnionFindSet(size_t size):_ufs(size,-1){}int UnionFind(int x){}void Union(int x1, int x2){}//长分支改为相同节点int FindRoot(int x){}bool InSet(int x1, int x2)…

数据结构:探秘AVL树

本节重点 理解AVL树的概念掌握AVL树正确的插入方法利用_parent指针正确更新平衡因子掌握并理解四种旋转方式:左单旋,右单旋,左右双旋,右左双旋 一、AVL树的概念 AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis&…

电源系统的热设计与热管理--以反激式充电器为例

前言 反激电源常用于各种电子设备中,比如充电器、适配器等,它们通过变压器进行能量转换。高温环境可能对电子元件造成影响,特别是像MOSFET、二极管、变压器这样的关键部件,导致效率变低,甚至可能导致功能失效。还有安…

linux课程学习二——缓存

一.文件io与标准io的一个区别 遇到死循环可以ctrl c结束进程 使用printf输出,输出没有问题 用wirte输出,参数1,可以理解为上面介绍的linux标准文件描述符的1(STDOUT)标准输出,我们加上一个死循环while&…

Kafka中的消息如何分配给不同的消费者?

大家好,我是锋哥。今天分享关于【Kafka中的消息如何分配给不同的消费者?】面试题。希望对大家有帮助; Kafka中的消息如何分配给不同的消费者? 在 Kafka 中,消息是通过 主题(Topic) 进行组织的&…

Android的安全问题 - 在 Android 源码的 system/sepolicy 目录中,区分 public、private 和 vendor的目的

参考:Google文档 在 Android 8.0 及更高版本中自定义 SEPolicy 在 Android 源码的 system/sepolicy 目录中,区分 public、private 和 vendor 是为了模块化 SELinux 策略,并明确不同部分的访问权限和接口边界。这种设计主要基于以下原因&…

Java NIO之FileChannel 详解

关键点说明 文件打开选项: StandardOpenOption.CREATE - 文件不存在时创建 StandardOpenOption.READ/WRITE - 读写权限 StandardOpenOption.APPEND - 追加模式 StandardOpenOption.TRUNCATE_EXISTING - 清空已存在文件 缓冲区操作: ByteBuffer.wrap…

stock-pandas,一个易用的talib的替代开源库。

原创内容第841篇,专注智能量化投资、个人成长与财富自由。 介绍一个ta-lib的平替——我们来实现一下,最高价突破布林带上轨,和最低价突破布林带下轨的可视化效果: cross_up_upper stock[high].copy()# cross_up_upper 最高价突破…

JVM 面经

1、什么是 JVM? JVM 就是 Java 虚拟机,它是 Java 实现跨平台的基石。程序运行之前,需要先通过编译器将 Java 源代码文件编译成 Java 字节码文件;程序运行时,JVM 会对字节码文件进行逐行解释,翻译成机器码指令&#x…

【JavaScript】合体期功法——DOM(一)

目录 DOMWeb API 基本概念作用和分类 什么是 DOMDOM 树DOM 对象 获取 DOM 元素根据 CSS 选择器来获取 DOM 元素选择匹配的第一个元素选择匹配的多个元素 其他获取 DOM 元素方法 修改元素的内容对象.innerText 属性对象.innerHTML 属性案例:年会抽奖 修改元素属性修改…

GAMMA数据处理(十)

今天向别人请教了一个问题,刚无意中搜索到了一模一样的问题 不知道这个怎么解决... ok 解决了 有一个GAMMA的命令可转换 但是很奇怪 完全对不上 转换出来的行列号 不知道为啥 再试试 是因为经纬度坐标的小数点位数 de as