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

正则表达式需求:匹配非单词组成部分的整数与浮点数

解决Vertica中移除独立数字(保留单词内嵌数字)的正则方案

嘿,我明白你的需求——要在Vertica里用REGEXP_REPLACE剥离那些不属于单词一部分的整数、浮点数,同时像table5、go2market这种和字母绑定的数字要完整保留对吧?刚好对Vertica的Basic Regex(BRE)有点经验,给你梳理下方案:

核心思路

我们要匹配的是前后不与字母直接相连的数字(包括整数、各种形式的浮点数),替换时只去掉数字部分,保留前后的非字母字符(比如空格、标点、符号)。

最终正则表达式

直接上可以用的REGEXP_REPLACE语句:

REGEXP_REPLACE(your_column_name, '\(^\|[^a-zA-Z]\)\(\([0-9]+\.[0-9]*\|\.[0-9]+\|[0-9]+\)\)\(\([^a-zA-Z]\|$\)', '\1\3', 'g')

拆解说明

我把这个正则拆成几部分,方便你理解:

  • 匹配前后边界:\(^\|[^a-zA-Z]\) 和 \([^a-zA-Z]\|$\)
    • 前者匹配字符串开头,或者非字母字符(确保数字前面不是字母)
    • 后者匹配非字母字符,或者字符串结尾(确保数字后面不是字母)
  • 匹配数字序列:\([0-9]+\.[0-9]*\|\.[0-9]+\|[0-9]+\)
    • [0-9]+\.[0-9]*:匹配带小数点的浮点数(比如3.14、6.)
    • \.[0-9]+:匹配以小数点开头的浮点数(比如.5)
    • [0-9]+:匹配纯整数(比如123)
  • 替换逻辑:用\1\3替换整个匹配项——也就是保留前后的非字母边界,去掉中间的数字部分,'g'标志表示全局替换(处理所有符合条件的数字)

测试验证

举几个常见场景的效果:

  • 输入:"hello 123 world" → 输出:"hello world"
  • 输入:"table5 and go2market" → 输出:"table5 and go2market"(完全保留)
  • 输入:"$45.67 is the price" → 输出:"$ is the price"
  • 输入:"(789) .5 3." → 输出:"() . ."

注意事项

Vertica用的是POSIX Basic Regex,所以语法上有几个关键点:

  • 分组必须用转义括号\( \),而不是普通括号
  • 或操作符要写成\|,不能直接用|
  • 全局替换需要显式加'g'标志,否则只会替换第一个匹配项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:30:57