我在BigQuery有一张桌子需要清理。在列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+),但这并没有将任何东西转换为图片库。
谢谢你提前帮忙。
发布于 2022-01-14 18:10:37
考虑以下方法
select if(
regexp_contains(content_column,r'^/g\d+'),
'gallery',
content_column
) as content_column
from `my_table` 如果应用于问题中的样本数据,则输出为

发布于 2022-01-14 15:38:10
如果要用gallery替换完全匹配,则不需要模式中的捕获组。
\w+\d+匹配1+单词字符和1+数字,这至少有2个字符,并且没有指定g字符。\^g\d+与^g和1+数字匹配。相反,您可以匹配/和1或更多位数:
r'/g\d+或使用带有多行标志的锚点^ (清除反斜杠)从字符串的开始进行匹配:
(?m)^/g\d+https://stackoverflow.com/questions/70712808
复制相似问题