问题描述
所以我一直在努力用 ^ 分隔符分隔随机文本
注意:我不使用 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
:
- 结果
mapredtask2
select regexp_extract(value,'^(?:[^\\^]*\^){3}([^\\^]*',1)
- 结果为 0 值
select regexp_extract(value,'^(?:([^^]+)\^?){4}',1)
这里出了什么问题?我该怎么办?
解决方法
第一个模式缺少最后的 )
,并且您在字符类中添加了不必要的反斜杠。
你可以使用
regexp_extract(value,'^(?:[^^]*\^){3}([^^]*)',1)
参见regex demo。
详情:
-
^
- 字符串的开始 -
(?:[^^]*\^){3}
- 除^
和^
字符以外的任何字符出现 3 次 -
([^^]*)
- 第四个 字段,除^
之外的零个或多个字符。
因此,大括号内的数字是 N-1 值(如果您需要第 14 个字段,请使用 {13}
)。