Teradata正则表达式,看后面

时间:2017-08-22 13:01:45

标签: sql regex teradata

我有一个字段,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.

我是关于正则表达式的完整新手,特别是在前瞻和后瞻方面,所以我可能会遇到一些非常简单的错误,但我无法弄清楚它是什么&# 39; m do似乎是正确的语法。

1 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式来提取第一个数字:

REGEXP_substr(Simplified_Description, '\d+(?=\s*X\s*\d)') AS FirstNum

和第二个数字的正则表达式:

REGEXP_substr(Simplified_Description, '\d+\s*X\s*\K\d+') AS SecondNum

请参阅regex 1regex 2 demo

模式1详细信息

  • \d+ - 一个或多个数字,后跟......
  • (?=\s*X\s*\d) - 一系列模式:
    • \s* - 0+ whitespaces
    • X - X字符
    • \s* - 0+ whitespaces
    • \d - 数字。

模式2详细信息

  • \d+ - 一位或多位
  • \s*X\s* - 用{0}空白字符包围的X字符
  • \K - match reset operator省略(删除)与匹配值匹配的文字
  • \d+ - 一位或多位数。