正则表达式(在第一个匹配项之后(无第一个匹配项))

时间:2020-03-19 16:57:22

标签: regex snowflake-cloud-data-platform

我正在努力使用简单的Regex表达式。基本上,我希望在“ _”的第一个匹配项之后都没有“ _”的所有内容。

我当前的表情是这样的:ic_launcher_foreground

当我输入内容时:_(.*)

输出为:AAA_BBB_CCC

我的理想输出是:_BBB_CCC

我正在使用带有内置正则表达式功能的雪花数据库。

很遗憾,我不能使用BBB_CCC,因为它不支持这种格式的“?<=”。还有其他方法可以修改(?<=_).*以获得正确的输出吗?

谢谢。

4 个答案:

答案 0 :(得分:2)

您可以使用正则表达式来实现此目的,例如JavaScript这样的工作就可以完成

"AAA_BBB_CCC".replace(/[^_]+./, '')

在雪花中使用REGEXP_REPLACE

regexp_replace('AAA_BBB_CCC','^[^_]+_','')

https://docs.snowflake.net/manuals/sql-reference/functions/regexp_replace.html

但是您也可以找到_的第一个索引并使用所有语言都可用的子字符串

let text = "AAA_BBB_CCC"
let index = text.indexOf('_')
if(index !== -1 && index < text.length) {
    let result = text.substring(index+1)
}

答案 1 :(得分:1)

在Snowflake SQL中,您可以使用REGEXP_SUBSTR,其语法为

<ion-input type="number" value="5" min="1" max="9"></ion-input>

该函数允许您返回捕获的子字符串

默认情况下,REGEXP_SUBSTR( <string> , <pattern> [ , <position> [ , <occurrence> [ , <regex_parameters> [ , <group_num ] ] ] ] )返回主题的整个匹配部分。但是,如果指定了REGEXP_SUBSTR(用于“提取”)参数,则e将返回与模式中的第一组匹配的主题部分。如果指定了REGEXP_SUBSTR,但也没有指定e,则group_num默认为1(第一组)。如果模式中没有子表达式,REGEXP_SUBSTR的行为就像未设置e一样。

因此,您需要将 regex_parameters 设置为group_num,并将-e参数(可选)设置为group_num

1

答案 2 :(得分:0)

使用捕获组:

\_(?<data>.*)

哪个返回包含data的捕获组BBB_CCC

示例: https://regex101.com/r/xZaXKR/1

答案 3 :(得分:0)

要使其真正起作用,您需要使用:

SELECT REGEXP_SUBSTR('AAA_BBB_CCC', '_(.*)', 1, 1, 'e', 1);

给出:

REGEXP_SUBSTR('AAA_BBB_CCC', '_(.*)', 1, 1, 'E', 1)
BBB_CCC

您需要传递<regex_parameters>的{​​{3}}参数e子句,因为它是extract sub-matches.,因此Wiktor的答案是95%正确。