代码之家  ›  专栏  ›  技术社区  ›  KaraiKare

SQL Athena:用于提取多个圆括号之间的字符串的正则表达式

  •  0
  • KaraiKare  · 技术社区  · 2 年前

    所以我有一个表,它有store_name列,括号里有它们的位置。我需要的是提取括号之间的字符以获得它们的位置

    商店名称
    Daniel Bro(东京)
    Michael Ole(新店)(伦敦)

    问题是有些行有多个圆括号,但我知道位置总是指最后一个圆括号。有没有一种方法可以使用RegEx只提取最后一个括号之间的字符串。

    我试过使用这些,但它只提取第一个括号之间的字符串。

    select regexp_extract(store_name, '[^\(\)]+(?=\))') as location from table a

    上面的代码返回“Tokyo”和“New Store”,而不是“东京”和“伦敦”。有办法做到这一点吗?

    2 回复  |  直到 2 年前
        1
  •  1
  •   Tim Biegeleisen    2 年前

    添加 $ regex模式末尾的边界标记,表示存储名称的末尾:

    SELECT REGEXP_EXTRACT(store_name, '\((.*?)\)$', 1) AS location
    FROM TableA;
    

    请注意,第三个参数 1 传递给 REGEXP_EXTRACT 表示返回第一个(也是唯一一个)捕获组。

        2
  •  1
  •   learning    2 年前

    您可以使用此 .*

    这利用了一个事实,即*量词是贪婪的,所以第一个.*将消耗整个文本。之后,正则表达式引擎回溯(即从末尾向后遍历字符串),直到字符串中最后一次出现的“.*”匹配为止。