如何使用 2 个不同的模式获取第 n 次出现之间的所有字符串
how to get all strings between nth occurance with 2 different pattern
我有 table,其中一个字段的值如下:
LLC1R.8888.GR0054656*DR.798012...2..............GR0054656*CNY*ARTIST*
TC1R.88.GR0054656*DR.765012...2..............GR0054656*EUR*LUKE*
K56R.8.GR0054656*DR.258812...4..............GR0054656*AUD*
790GG.88.GR0054656*DR.338012...5..............GR0054656*IDR*MATTHEW*
GREFD.888.GR0054656*DR.198012...6..............GR0054656*
预期结果:
ARTIST
LUKE
MATTHEW
如何提取第 3 和第 4 之间的内容并使其他列安全,因为结果将在 case when
中使用?
任何 ideas/help 将不胜感激。
谢谢。
您可以使用
REGEXP_EXTRACT(col, '^(?:[^*]*\*){3}([^*]*)', 1)
详情
^
- 字符串开头
(?:[^*]*\*){3}
- 除 *
之外的任何字符出现三次,然后是 *
字符
([^*]*)
- 第 1 组:除 *
. 之外的任何零个或多个字符
index 参数设置为 1
以便提取第 1 组值。
请注意,(?:[^*]*\*)
是一个 non-capturing group,它不会捕获(存储在单独的内存缓冲区中)它匹配的子字符串。
我有 table,其中一个字段的值如下:
LLC1R.8888.GR0054656*DR.798012...2..............GR0054656*CNY*ARTIST*
TC1R.88.GR0054656*DR.765012...2..............GR0054656*EUR*LUKE*
K56R.8.GR0054656*DR.258812...4..............GR0054656*AUD*
790GG.88.GR0054656*DR.338012...5..............GR0054656*IDR*MATTHEW*
GREFD.888.GR0054656*DR.198012...6..............GR0054656*
预期结果:
ARTIST
LUKE
MATTHEW
如何提取第 3 和第 4 之间的内容并使其他列安全,因为结果将在 case when
中使用?
任何 ideas/help 将不胜感激。 谢谢。
您可以使用
REGEXP_EXTRACT(col, '^(?:[^*]*\*){3}([^*]*)', 1)
详情
^
- 字符串开头(?:[^*]*\*){3}
- 除*
之外的任何字符出现三次,然后是*
字符([^*]*)
- 第 1 组:除*
. 之外的任何零个或多个字符
index 参数设置为 1
以便提取第 1 组值。
请注意,(?:[^*]*\*)
是一个 non-capturing group,它不会捕获(存储在单独的内存缓冲区中)它匹配的子字符串。