问题描述
您好,我使用SNowflake尝试将200k或200M之类的数字转换为200000和2000000000。 我是regex的新手,使用regex速查表可以创建其中有k的正则表达式字符串,但我无法用000代替k部分。
select REGEXP_REPLACE('234k','(^.*[Kk]$)','000')
有人可以帮我指出正确的方向或告诉我它是如何完成的吗?
谢谢!
解决方法
'(^.*[Kk]$)'
匹配整个字符串,因此您将整个字符串替换为000
。
相反,您应该匹配[Kk]
并将其替换为000
。
select REGEXP_REPLACE('234k','[Kk]','000')
请注意,您实际上并不一定要使用正则表达式,替换子字符串的正常函数也可以使用(我不知道Snowflake,但其文档建议使用REPLACE
函数)。
这听起来像replace()
:
select replace(replace(lower(col),'k','000'),'m','000000')
,
使用以下表达式:-
select REGEXP_REPLACE(REGEXP_REPLACE(<column,or string>,'[Kk]$','[Mm]$','000000');
$表示字符串的结尾,因此除非缩写正确且在结尾,否则不会替换。
测试:
//replace the k to 000 \
select REGEXP_REPLACE(REGEXP_REPLACE('15k','000000');
//replace the m to 000000 \
select REGEXP_REPLACE(REGEXP_REPLACE('15m','000000');
//no replace \
select REGEXP_REPLACE(REGEXP_REPLACE('15k1','000000');
select REGEXP_REPLACE(REGEXP_REPLACE('15m1','000000');
注意:我在较早的答案中删除了\ d *,因为在匹配模式中无法使用\ d *并给出相同的结果。