当前位置: 首页 > news >正文

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.Regex

val 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.distinct

println(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)

相关文章:

  • 安科瑞微电网能量管理控制箱,光伏发电的守护者
  • 【蓝桥杯】重点冲刺
  • 打破传统查询瓶颈:深入解析MySQL 8.0 LATERAL JOIN的实战价值
  • Oracle初识:登录方法、导入dmp文件
  • 【深度学习新浪潮】图像修复(Image Inpainting)技术综述:定义、进展与应用展望
  • 第十六届蓝桥杯模拟二(串口通信)
  • 文献笔记 - Analysis of Ground Effect for Small-Scale UAVs in Forward Flight
  • 设计秒杀系统(高并发的分布式系统)
  • 20250327解决在立创eda中铺了GND的铜之后仍显示部分地线未连接
  • Vue3.5 企业级管理系统实战(十):面包屑导航组件
  • FFmpeg学习:AVPacket结构体
  • 谷歌Chrome浏览器零日漏洞遭黑客大规模利用
  • Nginx 学习笔记
  • 华为eNSP-配置静态路由与静态路由备份
  • FALL靶机
  • 双目云台摄像头全方位监控方案
  • 网吧网络的边缘计算
  • CSS样式大全
  • 软考《信息系统运行管理员》- 5.3 信息系统数据资源备份
  • 17 python 文件管理
  • 安庆做网站赌博代理/百度网页入口官网
  • 交友网站模板下载/阿里云云服务平台
  • 如何打破违法网站/上海有哪些优化网站推广公司
  • 我国网络营销方式/官网关键词优化价格
  • 不关闭网站备案/百度一下网页搜索
  • 贪便宜网站/网络广告策划书模板范文