我有一个字段,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似乎是正确的语法。
答案 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 1和regex 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+
- 一位或多位数。