regex 如何在红移中使用正则表达式捕获组(或替代)

guicsvcw  于 2023-03-13  发布在  其他
关注(0)|答案(5)|浏览(119)

我在红移列中有一个字段,如下所示:
abcd1234df-TEXT_I-WANT
前10个数字中的字符和数字可以是字母或数字。
如果我使用捕获组正则表达式,我会使用一个写得很差的表达式,如(\w\w\w\w\w\w\w\w\w\w\W)(.*),并对第二组进行图形化
但是我在红移中实现这个有困难,所以我不确定如何只抓取第一个连字符之后的内容

3qpi33ja

3qpi33ja1#

如前所述,regex可能有些过头,但在某些情况下它还是有用的。
下面是一个基本的replace模式:

SELECT
    regexp_replace(
      'abcd1234df-TEXT_I-WANT'  -- use your input column here instead
    , '^[a-z0-9]{10}-(.*)$'     -- matches whole string, captures "TEXT_I-WANT" in $1
    , '$1'                      -- inserts $1 to return TEXT_I-WANT
    )
;
xt0899hw

xt0899hw2#

@wp78de给了我们一个很好的建议来使用REGEX_REPLACE。我允许你选择捕获组。使用你的正则表达式,它看起来像这样,虽然你不需要两个组在这里,使用一个就足够了。

select 
  regexp_replace(
    'abcd1234df-TEXT_I-WANT',
    '(\\w\\w\\w\\w\\w\\w\\w\\w\\w\\w\\W)(.*)', 
    '$2' -- replacement selecting 2nd capture group
  );

另一个选项,虽然不太灵活,是使用REGEX_SUBSTRe参数集(Extract a substring using a subexpression)。它允许您选择一个子字符串,但仅限于您的正则表达式中的第一个捕获组。您还必须将 position 和 * occurrence * 参数设置为默认1
使用您建议的REGEX,但仅限1组:

select 
  regexp_substr(
    'abcd1234df-TEXT_I-WANT',
    '\\w\\w\\w\\w\\w\\w\\w\\w\\w\\w\\W(.*)', 
    1, -- position
    1, -- occurrence
    'e' -- parameters
  );
piah890a

piah890a3#

正则表达式可能有些过头了,基本的字符串操作就足够了:

select substring(col from position('-' in col) + 1)
gdrx4gfi

gdrx4gfi4#

这可以通过charindexsubstring来实现。

substring(col,charindex('-',col)+1)
xmd2e60i

xmd2e60i5#

  • 您可以使用带有regexp_substr的公用表表达式来获取所需的字符串,如下所示:*
with cte as
(
 select 'abcd1234df-TEXT_I-WANT' as str   
)    
select regexp_substr(str,'-.*') 
       as derived_str
  from cte;

derived_str
-------------
-TEXT_I-WANT

相关问题