【问题标题】:PowerCenter REG_EXTRACT issuePowerCenter REG_EXTRACT 问题
【发布时间】:2015-02-27 10:45:37
【问题描述】:

我遇到了问题,在 PWC (9.5.1) 中将 REGEXP_SUBSTR 从 ORACLE 转换为 REG_EXTRACT。

在 Oracle 中我有以下语句:

select 
regexp_substr('AA          12345678               *             123','[^' || CHR (9) || ']+', 1,1)  FIELD1,
regexp_substr('AA          12345678               *             123','[^' || CHR (9) || ']+', 1,2)  FIELD2,
regexp_substr('AA          12345678               *             123','[^' || CHR (9) || ']+', 1,3)  FIELD3,
regexp_substr('AA          12345678               *             123','[^' || CHR (9) || ']+', 1,4)  FIELD4
from    DUAL;

结果:

FIELD1=AA
FIELD2=12345678
FIELD3=*
FIELD4=123

在 PWC 中,我使用类似的正则表达式创建了一个带有 4 个端口的转换:

FIELD1=REG_EXTRACT('AA          12345678               *             123','([^\s]+)', 1,1)
FIELD2=REG_EXTRACT('AA          12345678               *             123','([^\s]+)', 1,2)
FIELD3=REG_EXTRACT('AA          12345678               *             123','([^\s]+)', 1,3)
FIELD4=REG_EXTRACT('AA          12345678               *             123','([^\s]+)', 1,4)

结果:

FIELD1=NULL
FIELD2=NULL
FIELD3=NULL
FIELD4=NULL

为什么我在 FIELD[1-4] 中得到 NULL 值?谁能帮我解答这个问题?

谢谢!

【问题讨论】:

    标签: regex etl informatica informatica-powercenter


    【解决方案1】:

    REGEXP_SUBSTRREG_EXTRACT的第3个和第4个参数不同——Oracle的position(第3个参数)是PowerCenter的match_from_start(第4个参数),occurrencesubPatternNum的切换方式类似。

    尝试使用以下表达方式:

    FIELD1=REG_EXTRACT('AA  12345678  *  123', '([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)', 1)
    FIELD2=REG_EXTRACT('AA  12345678  *  123', '([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)', 2)
    FIELD3=REG_EXTRACT('AA  12345678  *  123', '([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)', 3)
    FIELD4=REG_EXTRACT('AA  12345678  *  123', '([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)', 4)
    

    这是REG_EXTRACT 参数列表:

    1. subject - 要与正则表达式模式比较的值
    2. pattern - 要匹配的正则表达式模式;将每个子模式括在括号中
    3. subPatternNum - 要匹配的正则表达式的子模式编号
    4. match_from_start - 如果从字符串的开头找到匹配项,则返回子字符串;使用以下准则来确定从起始值开始的匹配:
      • 0 - 将模式与起始索引或任何索引中的主题字符串匹配
      • 非零 - 将模式与起始索引中的主题字符串匹配

    【讨论】:

    • 你不应该匹配REG_EXTRACT('AA 12345678 * 123','([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)',4)等组之间的文本吗?
    • @MarekGrzenkowicz 和 Samik 感谢您的帮助 :) 您的解决方案可以解决此问题。但是,如果我有一个动态字符串,有时有 4 个或更多字段,我应该如何定义我的正则表达式?
    • @RuiCaeiro 您可以忽略正则表达式末尾带有.* 的任何额外字段。
    • @MarekGrzenkowicz 是的,我有最大数量的字段,但我每次都没有相同的字段。我将根据字段的数量定义 N 个端口。
    • @RuiCaeiro 您需要使用带有 N 个子模式的正则表达式。字段有何不同?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多