regexp_replace替换数字中的逗号

时间:2018-11-01 15:33:40

标签: regex replace

如果字符串中的逗号是Amount的一部分,我需要替换逗号,并保持其余字符不变。

之前:“ AAAA, 095,3美元,一切都很好,5324,agx3,xxyy 24 yz”
之后:“ AAAA, 0953美元,一切都很好,5324,agx3,xxyy 24 yz”

用作字符串之间分隔符的逗号必须保留,并可以用某些东西替换以便于识别。 (我使用管道作为分隔器)

我在下面尝试过,但需要建议对其进行纠正:

select regexp_replace('AAAA, **0953 USD**, ALL IS good ,5324, agx3, xxyy 24 yz','[^a-zA-Z0-9]+','|'); 

结果

AAAA|0953|USD|ALL|IS|good|5324|agx3|xxyy|24|yz

需要:

AAAA|0953 USD|ALL IS good|5324|agx3|xxyy 24|yz

3 个答案:

答案 0 :(得分:0)

如果支持环视,则可以使用:

(?<=\d),(?=\d)

答案 1 :(得分:0)

基于Oracle's syntax for REGEXP_REPLACE和一些测试here,我认为这可能会满足您的要求:

REGEXP_REPLACE( 'AAAA, 095,3 USD, ALL IS good ,5324, agx3, xxyy 24 yz',
                '([0-9]+),([0-9]+) USD',
                '\1\2 USD' )

OP指示数据库为Impala。根据OP的发现,正确的语法为:

REGEXP_REPLACE( 'AAAA, 095,3 USD, ALL IS good ,5324, agx3, xxyy 24 yz',
                '([0-9]+),([0-9]+) USD',
                '\\1\\2 USD' )

有关上下文,请参见下面的评论。

答案 2 :(得分:0)

选择REGEXP_REPLACE('AAAA,095,3 USD,ALL IS good,5324,agx3,xxyy 24 yz','([[0-9] +),([0-9] +)','\ 1 \ 2');这使它起作用。刚刚意识到Imapala使用了额外的\使其正常工作。谢谢StoneGiant