我在regexp概念方面相当菜鸟,我有下面的场景,方括号内的单词很少,它可能多次出现,我只需要保留其中一个单词,并应删除方括号。
现有格式:
| TXT |
| -------------------------------------------------------------------------------------- |
| This sentence has [num] [num] [num] [num] and there are [num] [num] in previous string |
我有这个上面的表与txt列,我需要应用一个regexp正则表达式函数来实现下面的输出。
期望输出:
| TXT |
| ------------------------------------------------------------------- |
| This sentence has num and there are num in previous string |
你能帮我这个忙吗,因为这需要在sql查询上完成..不想用UDF得到任何答案
先谢了。
我已经尝试了下面的查询,可以获得第一个要保留的num,但无法实现我所期望的
查询:
select
regexp_replace(regexp_replace(regexp_replace(txt,'\\[\\w+\\]','REGEX_WORD',1,1,'c'),'\\[\\w+\\]',''),'REGEX_WORD',regexp_replace(regexp_substr(txt,'\\[\\w+\\]'),'\\[|\\]','')) working_model from cte;
输出:
This sentence has num and there are in previous string
1条答案
按热度按时间kyxcudwk1#
我不希望使用UDF得到任何答案
代码提供了比正则表达式更大的灵活性,因此有一些可能性正则表达式本身可能无法涵盖。
你可以把你的模式放在括号里(这些东西
()
对于那些称它们为“括号”的人来说),然后告诉它这个模式可以重复1次或更多次{1,}
。如果你使用单引号'
来结束你的字符串,记得在Snowflake中将反斜杠\\
加倍。如果使用$$
来终止字符串,则不需要使用双反斜杠。您可以使用\1作为替换来反向引用第一个捕获组。不幸的是,这意味着它保留了周围的方括号:[]
你当然可以去掉所有的方括号,但是这种方法会在任何地方去掉它们,而不仅仅是在重复的单词上:
这种方法还有一个问题,问题中没有提到,但是如果方括号中重复的单词发生了变化怎么办?
那么会发生什么,或者这真的不是一个问题?这些类型的捕获组只会检测方括号内的单词,而不是它们正在改变。在这种情况下,如上所示的regexp_replace将返回第一个捕获组,它将返回
[num]
。