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 个或多个数字。