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

如何在BigQuery中为RE2正则表达式的捕获分组启用标志?

在BigQuery的RE2正则中使用i/s标志并保留捕获分组的方法

问题背景

基于Google RE2正则库的BigQuery REGEXP_REPLACE场景下,需要实现:

  • 开启i(不区分大小写)和s(点匹配换行)模式
  • 保留捕获分组的可引用性,不能将分组转为RE2规定的非捕获分组
  • 示例输入:My name is X、my Name is Y、MY NAME is Z,需将X/Y/Z替换为常量C,同时保留原开头的大小写格式,输出如My name is C

之前尝试用(?is:My name is )(\w+)的写法,导致第一个分组变为非捕获分组,无法通过\1引用原开头内容,无法满足需求。

解决方案

将模式修饰符(?is)放在正则表达式的最开头,作用于整个表达式,这样既开启了需要的模式,又不会影响捕获分组的定义。

BigQuery代码示例

SELECT 
  str AS original_str,
  REGEXP_REPLACE(str, r'(?is)(My name is )(\w+)', r'\1C') AS replaced_str
FROM UNNEST([
  'My name is X',
  'my Name is Y',
  'MY NAME is Z'
]) AS str

说明

  • (?is)作为全局模式修饰符,放在正则最前端,对整个表达式生效,同时不改变后续分组的捕获属性
  • 第一个捕获分组(My name is )会匹配原字符串中对应的开头部分(保留原大小写),替换时通过\1引用该内容
  • 第二个捕获分组(\w+)匹配需要替换的X/Y/Z,替换时直接用常量C覆盖这部分,最终得到保留原开头格式的目标字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:52:50