bigquery 中 regexp_replace 结果的条件规则

Posted

技术标签:

【中文标题】bigquery 中 regexp_replace 结果的条件规则【英文标题】:Conditional rules for results of a regexp_replace in bigquery 【发布时间】:2020-11-20 16:47:46 【问题描述】:

我正在编写一个 bigquery 标准 sql 语句,我想保留字母数字和连字符,同时删除空格和所有其他字符,这很容易:

REGEXP_REPLACE(field_1, '[^0-9a-zA-Z-]','')

但是,如果由于这个正则表达式,两个以前没有接触过的数字接触,我希望它们用“@”分隔。

示例: "他的体重是 2...... 1" --> hisweightis2@1 "他的体重现在是 2 1" --> hisweightis2@1now "他的体重或多或少是 2-1" --> hisweightis2-1moreorless "他的体重现在是 21 和 3" --> hisweightis21and3now

【问题讨论】:

【参考方案1】:

试试下面(BigQuery 标准 SQL)

#standardSQL
select field_1, 
  regexp_replace(regexp_replace(regexp_replace(
    field_1, 
    r'(\d)[^0-9a-zA-Z-]+(\d)', r'\1@\2'), 
      r'[^0-9a-zA-Z-@]', ''),
        r'([\D])@([\D])', r'\1\2'
    ) result
from `project.dataset.table` 

如果应用于您问题的样本数据 - 输出是

【讨论】:

以上是关于bigquery 中 regexp_replace 结果的条件规则的主要内容,如果未能解决你的问题,请参考以下文章

REGEXP_REPLACE 模式必须是 const 吗?比较 BigQuery 中的字符串

如何从 bigquery 中的句子中删除 \n����

Bigquery 仅更新部分页面路径

BigQuery 无法创建视图,但查询正常

Bigquery:将 SPLIT() 输出行分解为多列

如何在 Oracle 中使用 REGEXP_REPLACE 删除单词