regex_replace 以 char 开头,后跟整数的值 BigQuery SQL

regex_replace value that starts with char, followed by integers BigQuery SQL

我在 BigQuery 中有一个 table 需要清理。在 content_column 列中,我的值如下:

content_column
/a68786776
/g263647
/g47664
/galleries
/music

我想将所有以 /g 开头后跟任意数量的整数的值替换为字符串 gallery。期望的输出是:

content_column
/a68786776
gallery
gallery
/galleries
/music

我尝试了以下方法:

SELECT regexp_replace(content_column,r'\/(\w+\d+)\/', "gallery") as content_column
FROM `my_table`

这有效,但它也会将 /a68786776 转换为 gallery。我尝试将 (\w+\d+) 替换为 (\^g\d+),但没有将任何内容转换为图库。

提前感谢您的帮助。

如果您想用 gallery 替换完整匹配项,则模式中不需要捕获组。

  • 此模式 \w+\d+ 匹配 1+ 个单词字符和 1+ 个数字,最少 2 个字符且未指定 g 字符
  • 此模式 \^g\d+ 匹配 ^g 和 1+ 个数字。

相反,您可以匹配 / 和 1 个或多个数字:

r'/g\d+

Regex demo

或者使用带有多行标志的锚 ^(没有反斜杠)从字符串的开头开始匹配:

(?m)^/g\d+

考虑以下方法

select if(
    regexp_contains(content_column,r'^/g\d+'), 
    'gallery', 
    content_column
  ) as content_column
from `my_table`         

如果应用于您问题中的示例数据 - 输出为