如何使用 2 个不同的模式获取第 n 次出现之间的所有字符串

Posted

技术标签:

【中文标题】如何使用 2 个不同的模式获取第 n 次出现之间的所有字符串【英文标题】:how to get all strings between nth occurance with 2 different pattern 【发布时间】:2020-11-21 13:29:12 【问题描述】:

我有表格,其中一个字段的值如下:

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 中使用?

任何想法/帮助将不胜感激。 谢谢。

【问题讨论】:

【参考方案1】:

你可以使用

REGEXP_EXTRACT(col, '^(?:[^*]*\\*)3([^*]*)', 1)

详情

^ - 字符串开头 (?:[^*]*\*)3 - 除* 之外的任何字符出现三次,然后是* 字符 ([^*]*) - 第 1 组:除 * 之外的任何零个或多个字符。

index 参数设置为1 以便提取Group 1 值。

请注意,(?:[^*]*\*) 是一个 non-capturing group,它不会捕获(存储在单独的内存缓冲区中)它匹配的子字符串。

【讨论】:

@thecardcaptor 你在*之前使用过\\吗? 抱歉我没有使用?:效果很好。 提取人民币、欧元、澳元、印尼盾等货币怎么样? @thecardcaptor 将3 替换为2。见this regex demo。

以上是关于如何使用 2 个不同的模式获取第 n 次出现之间的所有字符串的主要内容,如果未能解决你的问题,请参考以下文章

在第n次出现空格后删除所有文本

获取字符串第 n 次出现的索引?

每个字符串每出现第 2 次,分别用文件的第 n 行替换两个不同的字符串

如何在 SQL 函数 CHARINDEX 中使用 RegEx 查找第 n 次出现

如何找到一个项目第n次出现在列表中的索引?

如何使用 DOM 获取内容