【问题标题】:SQL - Getting the 3rd String After a Regular ExpressionSQL - 在正则表达式之后获取第三个字符串
【发布时间】:2021-02-23 22:23:04
【问题描述】:

所以例如我有这个数据:

rmchat://room/kotak.com/Kotak_Debt_Brokers

我只需要从字符串中获取“Kotak”并将其显示在另一列中。有没有办法得到它?我一直在网上搜索,我似乎无法找到解决方案。请帮帮我。

STR, REGEXP_SUBSTR(STR, '(.*?)(\/||$)', 1, 2, NULL, 1)

这是我当前的代码,但它输出的最后一个字符串是 Kotak_Debt_Brokers。

【问题讨论】:

  • || 错误,在正则表达式中,使用单个 | 表示“或”。
  • 您应该用常规词语描述您要应用于数据的算法。因为Kotak之后可以有任何符号,没有人能猜到它是否在输出中。

标签: sql regex database string snowflake-cloud-data-platform


【解决方案1】:

使用

REGEXP_SUBSTR(STR, '.*/([^_]+)', 1, 1, NULL, 1)

或者,或者,

REGEXP_REPLACE(STR, '.*/([^_]+).*', '\\1')

regex proof/regex proof (regexp_replace)

说明

--------------------------------------------------------------------------------
  .*                       any character except \n (0 or more times
                           (matching the most amount possible))
--------------------------------------------------------------------------------
  /                        '/'
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    [^_]+                    any character except: '_' (1 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  .*                       any character except \n (0 or more times
                           (matching the most amount possible))

【讨论】:

  • 刚刚试过这个,它仍在输出最后一个字符串,即 Kotak_Debt_Brokers。我只需要输出 .com 之后的 Kotak 的第三个字符串。
  • @eggscapethepain 抱歉,如果您在问题中发布的内容属实,这是不可能的。为了安全起见,试试REGEXP_SUBSTR(STR, '.*/([^_]+)', 1, 1, 'e', 1),但实际上应该是一样的。或者,尝试替换:REGEXP_REPLACE(STR, '.*/([^_]+).*', '\\1')
【解决方案2】:

我认为这是你想要的:

select REGEXP_SUBSTR(STR, '([^/_]+)_[^/]*$', 1, 1, 'e')

你也可以试试:

select REGEXP_SUBSTR(STR, '/([a-zA-Z0-9]+)_[^/]*$', 1, 1, 'e')

这仅返回连字符后的字母数字字符

【讨论】:

  • 刚刚试过这个,它仍在输出最后一个字符串,即 Kotak_Debt_Brokers。我只需要输出 .com 之后的 Kotak 的第三个字符串。
  • @eggscapethepain 。 . .我只是对括号中的表达式稍作修改。
  • 是的,它只输出 Kotak_Debt。我不熟悉正则表达式,所以我真的不知道如何获得第三个字符串。 :(
  • @eggscapethepain 。 . .它不能返回带下划线的字符串,除非模式中的下划线([^/_])与数据中的下划线不同。
  • rmchat://room/kotak.com/Kotak_Debt_Brokers 不,我不需要获取带下划线的字符串。我只需要 / 和 .com 之后的字符串,这是 room/ 和 .com 数据之后的“kotak”。
猜你喜欢
  • 2017-04-20
  • 1970-01-01
  • 2022-08-04
  • 2014-10-05
  • 2013-03-12
  • 2021-12-17
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多