RegExp从管道定界字符串中提取值

时间:2019-10-29 14:15:31

标签: regex hadoop hive hiveql delimiter

我对regexp函数还很陌生,想要一些建议。 我有一个包含管道定界值并希望根据另一个值的位置提取一个值的字段。 原因是我想要的值并非总是设置,而是总是位于另一个值的第5位。希望到目前为止我有道理。

以下是字符串的示例:

| XYZ | CBA | 365 | 15841.25 | 43.40 | 20171202 | 20181201 | 365 | 17024.94 | 46.64 || 20171202 | 20181201 | 365 | 17024.94 | 46.64 || 0.00 | 546.18 | 0000 |

我想提取粗体和斜体的数字546.18,它倾向于排在第三个“ 365”之后的第5个位置,或者从下至上排在第一个365,这是我希望的。

我尝试反转字符串并获取365的第一个实例

第一步-反转字段(内容) 将(content)反转为content_rev

第二步-从563的第一个实例中恢复前55个字符,并将字符串反向恢复为原始

反向(substr(content_rev,instr(content_rev,'\ | 563 \ |')-50,55))作为extract_content

输出看起来像: | 365 | 17024.94 | 46.64 || 0.00 | 546.18 | 8528 | 02 | 0540023096 | 2 | 2

从现在开始不确定如何获取突出显示的值

我确信这种方法不是最有效的方法,因此,如果有人有更好的方法来获得结果,将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用|作为定界符并采用第5个元素。

split(your_string, '\\|')[5]

其中your_string是您使用反向得到的,等等:|365|17024.94|46.64||0.00|546.18|8528|02|0540023096|2|2