You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写正则表达式提取两种格式的UUID值(Vertica环境)

解决Vertica中提取两种格式UUID的正则问题

我懂你的困扰——原来的正则只抓数字开头的UUID,漏掉了字母开头的情况,这就来给你调整方案!

先看你的两种输入格式:

{"value":"e19f2b3e-9919-421e-a125-95fdd989459d"}
{"itemUuid":"8fe2a09e-aade-485c-b847-e83a780f1b8e"}

核心需求是提取符合UUID标准格式的字符串(8-4-4-4-12位十六进制字符,支持大小写字母)。原来的[0-9].*有两个明显问题:一是只限定数字开头,直接过滤了字母开头的UUID;二是会匹配到后面的"},还要额外做trim操作,不够精准。

改进后的Vertica SQL语句

直接用精确匹配UUID的正则表达式,不需要额外trim:

SELECT regexp_substr(me.value, '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}') AS product_id
FROM your_table me;

为什么这个正则管用?

  • [0-9a-fA-F]匹配十六进制的数字和大小写字母,覆盖UUID可能出现的所有字符
  • {8}-{4}-{4}-{4}-{12}严格对应UUID的分段长度,确保只匹配合法的UUID,不会误抓其他无关字符串
  • 不管UUID是在value还是itemUuid字段后,只要是标准格式的UUID,都能精准捕获

如果你的场景中键名固定(只有value和itemUuid两种),也可以用更针对性的正则避免意外匹配:

SELECT regexp_substr(me.value, '"(?:value|itemUuid)":"([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})"', 1, 1, 'e') AS product_id
FROM your_table me;

这里用了'e'参数(提取捕获组),直接拿到括号内的UUID,也是个可靠的方案。

内容的提问来源于stack exchange,提问作者Yulia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:32:36