在 Hadoop 中使用正则表达式从字符串中查找文本

问题描述 投票:0回答:1

我有以下字符串:BCRIS-QUEBEC.C67950210QC.5147650116.O5000977510.RD02.0026.00001.DistributionPair.O 在 Hadoop 中,我尝试拉出 RD02 并将其放在 Dist_Cu_Cable 列下。该字符串只是一个示例,RD02 可以是任何文本。我正在使用以下代码,但没有得到想要的结果。谁能帮帮我吗

    MAX(
CASE 
    WHEN lower(associatedwoi_id) LIKE '%distributionpair%' 
    THEN 
        CASE
            WHEN associatedwoi_id REGEXP '(?i)([^.]+)\.[^.]+\.[^.]+\.DistributionPair\.' 
            THEN REGEXP_REPLACE(associatedwoi_id, '.*(?i)([^.]+)\.[^.]+\.[^.]+\.DistributionPair\..*', '\\1')
        END
END
) AS Dist_Cu_Cable,
regex hadoop
1个回答
0
投票

听起来这就像 PowerShell 替换,任何匹配的内容都将被替换,即使您将其放在非捕获组中也是如此。因此,您需要通过像这样调整正则表达式来使用向前或向后查找来确保正则表达式仅匹配该特定的文本位:

(?i)([^.]+)(?=\.[^.]+\.[^.]+\.DistributionPair\.)
© www.soinside.com 2019 - 2024. All rights reserved.