【问题标题】:regex extract big query with numeric data正则表达式用数字数据提取大查询
【发布时间】:2021-09-07 13:50:18
【问题描述】:

我怎样才能从这个字符串中获取数字 2627995

"hellotest/2627995?hl=en"

我想获取号码 2627995,这是我当前的正则表达式,但是当我使用大查询中的正则表达式提取时它不起作用

(\/)\d{7,7}

SELECT
  REGEXP_EXTRACT(DESC, r"(\/)\d{7,7}")
  AS number
FROM
  `string table`

这是输出

谢谢!!

【问题讨论】:

  • 斜线不是正则表达式中的特殊字符:您既不需要使用括号(不需要捕获它)也不需要转义它。即\// 完全相同

标签: sql regex google-bigquery


【解决方案1】:

我认为您只想匹配最后一个路径分隔符之后、查询参数开头或 URL 结尾之前的所有数字。

SELECT REGEXP_EXTRACT(DESC, r"/(\d+)(?:\?|$)") AS number
FROM `string table`

Demo

【讨论】:

    【解决方案2】:

    试试这个:r"\/(\d+)"

    【讨论】:

      【解决方案3】:

      您的代码返回斜杠是因为您捕获了它(请参阅(\/)\d{7,7} 中的括号)。 REGEXP_EXTRACT 只返回捕获的子串。

      因此,您可以将正则表达式的另一部分用括号括起来:

      SELECT
        REGEXP_EXTRACT(DESC, r"/(\d{7})")
        AS number
      FROM
        `string table`
      

      注意

      • 在 BigQuery 中,正则表达式是用字符串文字指定的,而不是正则表达式文字(通常用正斜杠分隔),这就是为什么您不需要转义 / 字符(它不是特殊的正则表达式元字符)
      • {7,7} 等于 {7} 限制量词,表示七次出现

      另外,如果你确定数字在字符串的末尾或者后面跟着一个查询字符串,你可以将它增强为

      REGEXP_EXTRACT(DESC, r"/(\d+)(?:[?#]|$)")
      

      正则表达式的含义

      • / - 一个 / 字符
      • (\d+) - 第 1 组(实际输出):一位或多位数字
      • (?:[?#]|$) - ?# 字符,或字符串结尾。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-16
        • 2011-06-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多