为何在Postgres可用的正则表达式无法在BigQuery中运行?
修复BigQuery中REGEXP_EXTRACT的正则转义错误
在PostgreSQL里,SUBSTRING(my_col, '[0-9\-]+')能正常提取数字和连字符序列,但BigQuery用的是RE2正则引擎,和Postgres的正则规则有差异,才会触发Syntax error: Illegal escape sequence: \-错误。
解决这个问题有两种简单方案:
方法1:调整连字符在字符类中的位置
在正则字符类[]里,连字符如果放在开头或结尾,不需要转义就能直接表示字面量连字符。修改后的查询如下:
REGEXP_EXTRACT(my_col, '[0-9-]+') AS extracted_string
这种写法最简洁,也是RE2引擎推荐的用法。
方法2:使用双反斜杠转义
BigQuery的SQL字符串会先解析一层转义,所以要在正则里表示转义的连字符,得用双反斜杠\\。修改后的查询:
REGEXP_EXTRACT(my_col, '[0-9\\-]+') AS extracted_string
这样SQL会把\\解析成单个\,传递给RE2引擎后,\-就能被正确识别为字面量连字符。
两种方法都能实现你需要的提取数字和连字符序列的效果,优先推荐方法1,代码更易读。
内容的提问来源于stack exchange,提问作者vanhooser
相关产品推荐
相关产品推荐

