首页 > 解决方案 > 正则表达式(第一次匹配后全部(没有第一次匹配))

问题描述

我正在努力使用简单的正则表达式。基本上我想要在没有“_”的“_”的第一场比赛之后的一切。

我现在的表达是这样的:_(.*)

当我提供输入时:AAA_BBB_CCC

输出是:_BBB_CCC

我理想的输出是:BBB_CCC

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

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

谢谢你。

标签: regexsnowflake-cloud-data-platform

解决方案


您可以使用正则表达式来实现这一点,例如 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)
}

推荐阅读