【问题标题】:Regexp_Extract BigQuery anything up to "|"Regexp_Extract BigQuery 直到“|”
【发布时间】:2020-12-10 04:20:51
【问题描述】:

我对编码还很陌生,我想知道您能否帮我为 BigQuery SQL 编写一些正则表达式。

基本上我想提取条形符号“|”之前的所有内容我的专栏之一。

例子:

  • 源字符串: bla-BLABLA-cid=123456_sept1220_blabla--potato-Blah|someMore_string_stuff-IDontNeed

  • 期望的输出: bla-BLABLA-cid=123456_sept1220_blabla--potato-Blah

我考虑过使用 REGEXP_EXTRACT(string, delimiter) 函数,但我完全无法编写一些正则表达式 (LOL)。因此,我查看了 Stack,发现了以下内容:

SELECT REGEXP_EXTRACT( String_Name , "\S*\s*\|" ) ,
# or 
SELECT REGEXP_EXTRACT( String_Name , '.+?(?=|)')

但每次我收到诸如“invalid perl operator: (?=”或“Illegal escape space”之类的错误消息时

您对我收到这些消息的原因和/或如何继续提取这些字符串有什么建议吗?

非常感谢提前

【问题讨论】:

    标签: sql string google-bigquery


    【解决方案1】:

    您可以改用SPLIT

    SELECT SPLIT("bla-BLABLA-cid=123456_sept1220_blabla--potato-Blah|someMore_string_stuff-IDontNeed", "|")[OFFSET(0)]
    

    【讨论】:

      【解决方案2】:

      在模式字符串前加上r:

      SELECT REGEXP_EXTRACT(String_Name, r'\S*\s*\|')
      

      这是 原始字符串 常量的语法。您可以在documentation 中查看这意味着什么。

      【讨论】:

      • 谢谢!不幸的是,这给了我错误:无法解析正则表达式:无效的 perl 运算符:(?=
      • @AlexandraMorel-Fonteray 。 . .这是一个不同的问题,BQ 正则表达式没有反向引用。我的意思是获取示例的第一个正则表达式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2023-02-02
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多