首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Imapala Regex -查找特定的字符序列,它们之间有分隔符,有些不是字母、数字或下划线。

Imapala Regex -查找特定的字符序列,它们之间有分隔符,有些不是字母、数字或下划线。
EN

Stack Overflow用户
提问于 2022-09-27 17:55:40
回答 1查看 24关注 0票数 1

我对正则表达式很陌生,我需要在Impala中搜索一个字符串字段,以找到与这个确切的字符序列匹配的多个字符:~FC*,后面是另外11个*,它们之间可能有字母/数字(但不能,它们基本上是这个字符串字段中的分隔符)。在第12 *之后(如果在~FC*中计算#1 ),它应该紧跟在Y~后面。

因为星号不是字母或数字,所以我不确定如何正确地搜索这些分隔符。

到目前为止这是我的SQL:

代码语言:javascript
复制
select 
    regexp_extract(col_name, '(~FC\\*).*(\\*Y~)', 1) as "pattern_found"
from db.table
where id = 123456789
limit 1

返回的数据:

代码语言:javascript
复制
pattern_found
--------------
~FC*

(~FC\\*)在Impala SQL中,它返回~FC*,这很好(从我的另一个问题获得)

一直在尝试这个(~FC\\*).*(\\*Y~),它显然没有计算星号的数量,但它也没有选择Y。

这是一个测试字符串,它有2次出现:

代码语言:javascript
复制
N4*CITY*STATE*2155446*2120~FC*C*IND*30*MC*blah blah fjdgfeufh*27*0*****Y~FC*Z*IND*39*MC*jhlkfhfudfgsdkufgkusgfn*23*0*****Y~

结果应该是这2,其中有一个重叠的~之间。但如果两者都找不到的话,至少会有第一次被发现。

~FC*C*IND*30*MC*blah blah fjdgfeufh*27*0*****Y~ ~FC*Z*IND*39*MC*jhlkfhfudfgsdkufgkusgfn*23*0*****Y~

EN

回答 1

Stack Overflow用户

发布于 2022-09-27 19:59:43

想出了一个解决办法,但很高兴知道一个更好的方法来完成这个任务。

这就是Impala SQL中的工作原理,所有星号都需要括号和双转义反斜杠:

代码语言:javascript
复制
(~FC\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*Y)

完整SQL:

代码语言:javascript
复制
select 
    regexp_extract(col_name, '(~FC\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*[^\\*]*\\*Y)', 1) as "pattern_found"
from db.table
where id = 123456789
limit 1

下面是没有Impala SQL所需的额外语法的RegexDemo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73871897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档