我在红移列中有一个字段,如下所示:abcd1234df-TEXT_I-WANT前10个数字中的字符和数字可以是字母或数字。如果我使用捕获组正则表达式,我会使用一个写得很差的表达式,如(\w\w\w\w\w\w\w\w\w\w\W)(.*),并对第二组进行图形化但是我在红移中实现这个有困难,所以我不确定如何只抓取第一个连字符之后的内容
abcd1234df-TEXT_I-WANT
(\w\w\w\w\w\w\w\w\w\w\W)(.*)
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 ) ;
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_SUBSTR与e参数集(Extract a substring using a subexpression)。它允许您选择一个子字符串,但仅限于您的正则表达式中的第一个捕获组。您还必须将 position 和 * occurrence * 参数设置为默认1:使用您建议的REGEX,但仅限1组:
e
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 );
piah890a3#
正则表达式可能有些过头了,基本的字符串操作就足够了:
select substring(col from position('-' in col) + 1)
gdrx4gfi4#
这可以通过charindex和substring来实现。
charindex
substring
substring(col,charindex('-',col)+1)
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
5条答案
按热度按时间3qpi33ja1#
如前所述,regex可能有些过头,但在某些情况下它还是有用的。
下面是一个基本的replace模式:
xt0899hw2#
@wp78de给了我们一个很好的建议来使用REGEX_REPLACE。我允许你选择捕获组。使用你的正则表达式,它看起来像这样,虽然你不需要两个组在这里,使用一个就足够了。
另一个选项,虽然不太灵活,是使用REGEX_SUBSTR与
e
参数集(Extract a substring using a subexpression)。它允许您选择一个子字符串,但仅限于您的正则表达式中的第一个捕获组。您还必须将 position 和 * occurrence * 参数设置为默认1
:使用您建议的REGEX,但仅限1组:
piah890a3#
正则表达式可能有些过头了,基本的字符串操作就足够了:
gdrx4gfi4#
这可以通过
charindex
和substring
来实现。xmd2e60i5#
regexp_substr
的公用表表达式来获取所需的字符串,如下所示:*