我是/
的新用户,需要在application/motorola products/routers
上拆分列,然后选择第3个值。例如,来自
routers
希望获得motorola products
。如果没有第3个值,那么我们需要回到第2个值,即(.*?\/)(.*?\/)(.*?)(\/.*\/)
。我尝试了以下正则表达式模式,但它不起作用:
{{1}}
答案 0 :(得分:0)
您说单个字符是可选的。给.
一个quantifier *
或+
。我认为这个正则表达式实际上会更好:
(?:([^\/]+?\/)([^\/]+?)\/([^\/]*)|([^\/]+?\/)([^\/]+))
演示:https://regex101.com/r/dX6uQ9/2
我还没有合作/没有hive
所以无法证实这会有效,但我认为它应该让你更接近方向。
答案 1 :(得分:0)
听起来你只想要 last 值,这意味着最后/
之后的任何内容。正则表达式为[^/]+$
:
select regexp_extract(name, '[^/]+$', 0) from dummy;
如果有两个斜杠,则获得第三个值。如果有五个斜杠,则获得第六个值。
如果你想停止在第三个值,即使有两个以上的斜杠,你可以使用它:
select regexp_extract(name, '^(?:[^/]+/){0,2}([^/]+)', 1) from dummy;
索引参数1
使其提取第一个捕获组([^/]+)
中匹配的内容。
注意:我假设完整的值不会开始或结束并带有斜杠,例如/motorola products/routers
或application/motorola products/
。< / p>
答案 2 :(得分:0)
select split('application/motorola products/routers','/')[size(split('application/motorola products/routers','/'))-1]