Snowflake正则替换:指定首尾区间内大写单词替换为(NAME)
Snowflake正则替换:将指定区域内容替换为(NAME)
直接用目标文本的固定前后段作为锚点,精准定位要替换的名字部分,以下是可行的写法:
SELECT REGEXP_REPLACE( 'Transfer From MR JOE JOE to PayID Phone CREDIT TO ACCOUNT', '^(Transfer From ).*?( to PayID Phone CREDIT TO ACCOUNT)$', '\\1(NAME)\\2' );
执行后就能得到你想要的输出:Transfer From (NAME) to PayID Phone CREDIT TO ACCOUNT
原代码问题分析
你之前的正则用了多个独立的捕获组((.*Transfer From)|(CREDIT TO ACCOUNT)|\b([A-Z]{1,})\b|(\b(to \w+\w+)\b)),每个组匹配到内容后都会触发替换规则,导致所有大写单词、前后固定段都被拆分替换,才出现了一堆(NAME)的错误输出。
优化思路
- 用
^和$锚定整个字符串,确保只处理符合开头结尾规则的文本 - 把“Transfer From ”作为第一个捕获组,“ to PayID Phone CREDIT TO ACCOUNT”作为第二个捕获组
- 中间用
.*?非贪婪匹配名字部分,确保只替换“Transfer From ”到“ to ”之间的内容
如果名字部分是固定格式的大写单词(比如最多3个词),也可以用更精准的匹配:
SELECT REGEXP_REPLACE( 'Transfer From MR JOE JOE to PayID Phone CREDIT TO ACCOUNT', '^(Transfer From )[A-Z]+ [A-Z]+ [A-Z]+( to PayID Phone CREDIT TO ACCOUNT)$', '\\1(NAME)\\2' );
内容的提问来源于stack exchange,提问作者Dhvani Shah
相关产品推荐
相关产品推荐

