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.pswp.cn/bicheng/74934.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74934.shtml
英文地址,請注明出處:http://en.pswp.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