如何用正则替换数字序列中首次出现的9为88(BigQuery/谷歌表格)
解决方案
BigQuery 实现方式
使用 REGEXP_REPLACE 函数,通过捕获分组精准定位第一个9并替换:
SELECT REGEXP_REPLACE('4191159999', r'^(.*?)(9)(.*)$', r'\188\3') AS result;
- 正则逻辑:
^(.*?)非贪婪匹配第一个9之前的所有字符,(9)捕获首次出现的9,(.*)$匹配9之后的所有内容 - 替换规则:用
\1(前序内容)+88+\3(后续内容)拼接,仅替换第一个9
谷歌表格 实现方式
使用 REGEXREPLACE 函数,语法类似但反向引用用$标识:
=REGEXREPLACE("4191159999", "^(.*?)(9)(.*)$", "$188$3")
- 逻辑和BigQuery一致,只是反向引用符号从
\换成$,适配谷歌表格的函数规则
你之前尝试的问题说明
- 第一个正则
(O9;"(9.+?)";"8"):语法格式错误,且9.+?会匹配9加后续部分字符,替换逻辑完全偏离需求 - 第二个正则
^\d{2}9+:匹配了前两位数字+第一个9,替换成8自然会删掉前两位,不符合仅替换9的要求
内容的提问来源于stack exchange,提问作者Vinicius Oliveira
相关产品推荐
相关产品推荐

