我在红移列中有一个字段如下所示:
abcd1234df-TEXT_I-WANT
前10位数字和数字可以是字母或数字。
如果我使用捕获组正则表达式,我会使用写得不好的表达式(\w\w\w\w\w\w\w\w\w\w\W)(.*)
和grap第二组
但是我在红移中遇到这个问题时遇到了麻烦,所以不确定在第一个连字符之后我怎么才能抓住这些东西
答案 0 :(得分:5)
如前所述,正则表达式可能是一种矫枉过正。但是,它在某些情况下可能有用。
这是一个基本的replace模式:
int main(){
int tab[5]={10, 20, 30, 40, 50};
int *ptr;
ptr=tab+4;
printf("%d,%#x,%#x. \n",*ptr-1,&tab,ptr);
return 0;}
答案 1 :(得分:3)
正则表达式可能过度。基本字符串操作足够好:
select substring(col from position('-' in col) + 1)
答案 2 :(得分:1)
可以使用charindex
和substring
完成此操作。
substring(col,charindex('-',col)+1)
答案 3 :(得分:0)
您可以使用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
答案 4 :(得分:0)
@ wp78de为使用REGEX_REPLACE提供了很好的建议。我允许您选择捕获组。使用您的正则表达式看起来像那样,尽管您在这里不需要2个组,在这里使用1个组就足够了。
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
参数集(使用子表达式提取子字符串)。它允许您选择一个子字符串,但只能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
);