Teradata 正则表达式,往后看
Teradata regular expressions, look behind
我有一个字段,Simplified_Description,我正在寻找其中的模式。具体来说,我正在寻找类似 6 X 8 或 6X8 或 600X800 的图案。我想将第一个和第二个数字拉出到新字段中。我已经能够使用前瞻性获得第一个数字(在很多帮助下)。
REGEXP_substr(Simplified_Description, '[0-9]+(?= {0,1}[X] {0,1}[0-9]+)') AS FirstNum,
当我尝试通过将前瞻更改为后视(通过简单地添加“<”)来获取第二个数字时,
REGEXP_substr(Simplified_Description, '[0-9]+(?<= {0,1}[X] {0,1}[0-9]+)') AS SecondNum
我现在收到一个错误
SELECT Failed. [9134] The pattern specified is not a valid pattern.
我完全是正则表达式的新手,尤其是在前瞻和后视方面,所以我可能会遇到一些非常简单的错误,但我无法弄清楚我在做什么是正确的语法。
您可以使用以下正则表达式提取第一个数字:
REGEXP_substr(Simplified_Description, '\d+(?=\s*X\s*\d)') AS FirstNum
第二个数字的正则表达式:
REGEXP_substr(Simplified_Description, '\d+\s*X\s*\K\d+') AS SecondNum
参见regex 1 and regex 2 demo。
模式1详情
\d+
- 1 个或多个数字后跟...
(?=\s*X\s*\d)
- 一系列模式:
\s*
- 0+ 个空格
X
- 一个 X
字符
\s*
- 0+ 个空格
\d
- 一个数字。
模式 2 详细信息
\d+
- 1 个或多个数字
\s*X\s*
- X
包含任何 0+ 个空白字符的字符
\K
- match reset operator 省略(删除)匹配值 中到目前为止匹配的文本
\d+
- 1 个或多个数字。
我有一个字段,Simplified_Description,我正在寻找其中的模式。具体来说,我正在寻找类似 6 X 8 或 6X8 或 600X800 的图案。我想将第一个和第二个数字拉出到新字段中。我已经能够使用前瞻性获得第一个数字(在很多帮助下)。
REGEXP_substr(Simplified_Description, '[0-9]+(?= {0,1}[X] {0,1}[0-9]+)') AS FirstNum,
当我尝试通过将前瞻更改为后视(通过简单地添加“<”)来获取第二个数字时,
REGEXP_substr(Simplified_Description, '[0-9]+(?<= {0,1}[X] {0,1}[0-9]+)') AS SecondNum
我现在收到一个错误
SELECT Failed. [9134] The pattern specified is not a valid pattern.
我完全是正则表达式的新手,尤其是在前瞻和后视方面,所以我可能会遇到一些非常简单的错误,但我无法弄清楚我在做什么是正确的语法。
您可以使用以下正则表达式提取第一个数字:
REGEXP_substr(Simplified_Description, '\d+(?=\s*X\s*\d)') AS FirstNum
第二个数字的正则表达式:
REGEXP_substr(Simplified_Description, '\d+\s*X\s*\K\d+') AS SecondNum
参见regex 1 and regex 2 demo。
模式1详情
\d+
- 1 个或多个数字后跟...(?=\s*X\s*\d)
- 一系列模式:\s*
- 0+ 个空格X
- 一个X
字符\s*
- 0+ 个空格\d
- 一个数字。
模式 2 详细信息
\d+
- 1 个或多个数字\s*X\s*
-X
包含任何 0+ 个空白字符的字符\K
- match reset operator 省略(删除)匹配值 中到目前为止匹配的文本
\d+
- 1 个或多个数字。