如何使用talend在hive上的定界符nth之间进行regexp_extract

问题描述

所以我一直在努力用 ^ 分隔符分隔随机文本

注意:我不使用 split,因为我的天赋限制了它。所以只有regexp_extract

文本看起来像这样:

1^^^prophalena^BB^^^^^^^^^VVRT^4^206_MEE65^098740^0206_09^0ID00980990^1
^^^alchemist^^^^^^^^^^^8^314_YOUR^094589740^099_PPPP^0PP746739200^1

我已经尝试过这些正则表达式在各种情况下提取 prophalena

  1. 结果 mapredtask2
select regexp_extract(value,'^(?:[^\\^]*\^){3}([^\\^]*',1)
  1. 结果为 0 值
select regexp_extract(value,'^(?:([^^]+)\^?){4}',1)

这里出了什么问题?我该怎么办?

解决方法

第一个模式缺少最后的 ),并且您在字符类中添加了不必要的反斜杠。

你可以使用

regexp_extract(value,'^(?:[^^]*\^){3}([^^]*)',1)

参见regex demo

详情

  • ^ - 字符串的开始
  • (?:[^^]*\^){3} - 除 ^^ 字符以外的任何字符出现 3 次
  • ([^^]*) - 第四个 字段,除 ^ 之外的零个或多个字符。

因此,大括号内的数字是 N-1 值(如果您需要第 14 个字段,请使用 {13})。