Teradata 中的字边界 RegEx
Word boundaries RegEx in Teradata
考虑 2 个字符串,我试图找到姓氏 ng
的匹配项并忽略其他词,例如 string, working, laughing
:
t1 = "Strings are fun"
t2 = "Andrew ng is great"
在Python中,我可以使用单词边界,例如:
> re.findall('\bnb\b, t1)
> []
> re.findall('\bnb\b, t2)
> ng
如何在 Teradata 中复制 \b
以便
SELECT REGEXP_SIMILAR(t1, pattern, 'i')
returns 0
&
SELECT REGEXP_SIMILAR(t2, pattern, 'i')
returns 1
?
Teradata RegExes 基于 PCRE 并支持 \b
,但 RegExp_Similar 需要完全匹配,您需要添加 .*
:
select 'Andrew ng is great' as s
,regexp_similar(s,'.*\bng\b.*') -- 1
,regexp_substr(s,'\bng\b', 1, 1, 'i') -- ng
select 'Strings are fun' as s
,regexp_similar(s,'.*\bng\b.*') -- 0
,regexp_substr(s,'\bng\b', 1, 1, 'i') -- NULL
考虑 2 个字符串,我试图找到姓氏 ng
的匹配项并忽略其他词,例如 string, working, laughing
:
t1 = "Strings are fun"
t2 = "Andrew ng is great"
在Python中,我可以使用单词边界,例如:
> re.findall('\bnb\b, t1)
> []
> re.findall('\bnb\b, t2)
> ng
如何在 Teradata 中复制 \b
以便
SELECT REGEXP_SIMILAR(t1, pattern, 'i')
returns 0
&
SELECT REGEXP_SIMILAR(t2, pattern, 'i')
returns 1
?
Teradata RegExes 基于 PCRE 并支持 \b
,但 RegExp_Similar 需要完全匹配,您需要添加 .*
:
select 'Andrew ng is great' as s
,regexp_similar(s,'.*\bng\b.*') -- 1
,regexp_substr(s,'\bng\b', 1, 1, 'i') -- ng
select 'Strings are fun' as s
,regexp_similar(s,'.*\bng\b.*') -- 0
,regexp_substr(s,'\bng\b', 1, 1, 'i') -- NULL