【问题标题】:Error: Big Query REGEX_EXTRACT Cannot parse regular expression: invalid perl operator: (?<错误:Big Query REGEX_EXTRACT 无法解析正则表达式:无效的 perl 运算符:(?<
【发布时间】:2019-04-05 11:43:05
【问题描述】:

我尝试从 BigQuery 中的 #1 中提取 #2

REGEXP_EXTRACT(",\"AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki\"", r"(?<=,\")[a-zA-Z0-9]*")

#1 我试图从中提取的字符串

,"AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki"

#2 REGEX_EXTRACT 的预期结果

AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki

有人可以帮助我在正则表达式中正确转义引号和括号以从 #1 中提取 #2 吗?

【问题讨论】:

  • 您有逗号分隔的值列表吗?如果是这样,请将其包含在您的问题中,突出显示您要匹配的组件,然后为我们提供如何找出该组件的逻辑。

标签: regex google-bigquery


【解决方案1】:

我怀疑错误与您的后视有关,REGEX_EXTRACT 不支持。一种解决方法可能是将REGEX_REPLACE 与捕获组一起使用:

REGEXP_REPLACE(col, r",\"([a-zA-Z0-9]*)\"", "\\1")

这里我假设col 的值如下:

,"AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki"

你在问题​​中提到的。

【讨论】:

  • 有了这个,我得到了 AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki"
  • ... 符合您声明的预期结果。你期待不同的东西吗?
  • 我希望 AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki 结尾没有引号
  • @PreeteshGaitonde REGEXP_REPLACE(col, r",\"([a-zA-Z0-9]*)\"", "\\1") ...你能试试这个吗?我认为问题在于我在过去匹配的模式末尾留下了一个尾随引号。
【解决方案2】:

以下示例适用于 BigQuery 标准 SQL

#standardSQL
WITH `project.dataset.table` AS (
  SELECT ",\"AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki\"" string1
)
SELECT REGEXP_EXTRACT(string1, r'([a-zA-Z0-9]+)') string2
FROM `project.dataset.table`

结果

Row string2  
1   AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki     

或者只是简单的

SELECT REGEXP_EXTRACT(",\"AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki\"", r'([a-zA-Z0-9]+)')

顺便说一句,注意:BigQuery 使用 re2 库提供正则表达式支持 - 其中不支持 (?&lt;=re)。同时,从您的示例中不清楚为什么需要它,因为上面的示例没有它就可以完成工作

同时,如果您正在寻找最接近您的正则表达式(有问题) - 您可以使用r'(?:,\")([a-zA-Z0-9]*)',如下例所示

SELECT REGEXP_EXTRACT(",\"AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki\"", r'(?:,\")([a-zA-Z0-9]*)')

【讨论】:

    猜你喜欢
    • 2023-01-02
    • 2022-11-30
    • 1970-01-01
    • 2016-12-20
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多